From bf205de3a19328ee51081d3857b447ad457a9c26 Mon Sep 17 00:00:00 2001 From: JeLuF Date: Wed, 2 Nov 2022 21:12:20 +0100 Subject: [PATCH] NSIS script enhancements - Enable Unicode support - Activate LongPathsEnabled if the user tries to install into a directory with more than 30 characters length - Change welcome text page. No need to close other programs during our setup - Warn if the user has less than 8GB of RAM - Formatting, comments --- NSIS/sdui.nsi | 110 ++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 93 insertions(+), 17 deletions(-) diff --git a/NSIS/sdui.nsi b/NSIS/sdui.nsi index e1bae0e3..b7fa3898 100644 --- a/NSIS/sdui.nsi +++ b/NSIS/sdui.nsi @@ -1,5 +1,8 @@ ; Script generated by the HM NIS Edit Script Wizard. +Target x86-unicode +Unicode True +!AddPluginDir /x86-unicode "." ; HM NIS Edit Wizard helper defines !define PRODUCT_NAME "Stable Diffusion UI" !define PRODUCT_VERSION "Installer 2.35" @@ -18,6 +21,11 @@ Var Text Var V14 Var V15 +Var InstDirLen +Var LongPathsEnabled +Var AccountType + +;--------------------------------------------------------------------------------------------------------- ; This function returns the number of spaces in a string. ; The string is passed on the stack (using Push $STRING) ; The result is also returned on the stack and can be consumed with Pop $var @@ -44,13 +52,32 @@ Function CheckForSpaces Exch $R0 FunctionEnd +;--------------------------------------------------------------------------------------------------------- +; The function DirectoryLeave is called after the user chose the installation directory. +; If it calls "abort", the user is sent back to choose a different directory. Function DirectoryLeave - ; check whether the installation directory path is longer than 40 characters. + ; check whether the installation directory path is longer than 30 characters. + ; If yes, we suggest to the user to enable long filename support ;---------------------------------------------------------------------------- - StrLen $0 "$INSTDIR" - ${If} $0 > 40 - MessageBox MB_OK|MB_ICONEXCLAMATION "Installation path name too long. The installation path must not have more than 40 characters." - abort + StrLen $InstDirLen "$INSTDIR" + + ; Check whether the registry key that allows for >260 characters in a path name is set + ReadRegStr $LongPathsEnabled HKLM "SYSTEM\CurrentControlSet\Control\FileSystem" "LongPathsEnabled" + + ${If} $InstDirLen > 30 + ${AndIf} $LongPathsEnabled == "0" + ; Check whether we're in the Admin group + UserInfo::GetAccountType + Pop $AccountType + + ${If} $AccountType == "Admin" + ${AndIf} ${Cmd} `MessageBox MB_YESNO|MB_ICONQUESTION 'The path name is too long. $\n$\nYou can either enable long file name support in Windows,$\nor you can go back and choose a different path.$\n$\nFor details see: shorturl.at/auBD1$\n$\nEnable long path name support in Windows?' IDYES` + ; Enable long path names + WriteRegDWORD HKLM "SYSTEM\CurrentControlSet\Control\FileSystem" "LongPathsEnabled" 1 + ${Else} + MessageBox MB_OK|MB_ICONEXCLAMATION "Installation path name too long. The installation path must not have more than 30 characters." + abort + ${EndIf} ${EndIf} ; Check for spaces in the installation directory path. @@ -78,8 +105,12 @@ Function DirectoryLeave FunctionEnd +;--------------------------------------------------------------------------------------------------------- +; This function is currently not being used. To be used in the future for the v1.4 vs v1.5 chooser Function nsDialogsPage !insertmacro MUI_HEADER_TEXT "Default Stable diffusion model" "Select the default model to be installed" + + nsDialogs::Create 1018 Pop $Dialog @@ -90,23 +121,26 @@ Function nsDialogsPage ${NSD_CreateLabel} 0 0 100% 48u "Which Stable Diffusion Modell do you want to use?$\r$\n$\r$\nThere are two models of Stable Diffusion.$\r$\n- Version 1.4 is using less memory.$\r$\n- Version 1.5 is bigger, but has slightly better results." Pop $Label - ${NSD_CreateFirstRadioButton} 0 49u 100% 12u "Use SD v1.4 as default" + ${NSD_CreateFirstRadioButton} 0 49u 100% 12u "Use SD v1.4 as default (3.97 GB)" Pop $V14 - ${NSD_CreateAdditionalRadioButton} 0 62u 100% 12u "Use SD v1.5 as default" + ${NSD_CreateAdditionalRadioButton} 0 62u 100% 12u "Use SD v1.5 as default (4.7 GB)" Pop $V15 nsDialogs::Show FunctionEnd - +;--------------------------------------------------------------------------------------------------------- ; MUI Settings +;--------------------------------------------------------------------------------------------------------- !define MUI_ABORTWARNING !define MUI_ICON "sd.ico" !define MUI_WELCOMEFINISHPAGE_BITMAP "astro.bmp" ; Welcome page +!define MUI_WELCOMEPAGE_TEXT "This installer will guide you through the installation of Stable Diffusion UI.$\n$\n\ +Click Next to continue." !insertmacro MUI_PAGE_WELCOME ; License page !insertmacro MUI_PAGE_LICENSE "..\LICENSE" @@ -118,19 +152,21 @@ FunctionEnd ;; TODO: Requires support from "Start Stable Diffusion UI.cmd" and "server.py" ;; which needs to be developed first ; -------- -; Page custom nsDialogsPage +;Page custom nsDialogsPage ; -------- ; Instfiles page -!insertmacro MUI_PAGE_INSTFILES +!insertmacro MUI_PAGE_INSTFILES + ; Finish page !define MUI_FINISHPAGE_RUN "$INSTDIR\Start Stable Diffusion UI.cmd" !insertmacro MUI_PAGE_FINISH ; Language files !insertmacro MUI_LANGUAGE "English" - -; MUI end ------ +;--------------------------------------------------------------------------------------------------------- +; MUI end +;--------------------------------------------------------------------------------------------------------- Name "${PRODUCT_NAME} ${PRODUCT_VERSION}" OutFile "Install Stable Diffusion UI.exe" @@ -138,6 +174,8 @@ InstallDir "C:\Stable-Diffusion-UI\" InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" "" ShowInstDetails show +;--------------------------------------------------------------------------------------------------------- +; List of files to be installed Section "MainSection" SEC01 SetOutPath "$INSTDIR" File "..\CreativeML Open RAIL-M License" @@ -153,17 +191,55 @@ Section "MainSection" SEC01 CreateShortCut "$SMPROGRAMS\Stable Diffusion UI\Start Stable Diffusion UI.lnk" "$INSTDIR\Start Stable Diffusion UI.cmd" SectionEnd +;--------------------------------------------------------------------------------------------------------- ; Our installer only needs 25 KB, but once it has run, we need 25 GB ; So we need to overwrite the automatically detected space requirements. ; https://nsis.sourceforge.io/Docs/Chapter4.html#4.9.13.7 ; The example in section 4.9.13.7 seems to be wrong: the number ; needs to be provided in Kilobytes. Function .onInit - # Set required size of section 'SEC01' to 25 Gigabytes - SectionSetSize ${SEC01} 26214400 + ; Set required size of section 'SEC01' to 25 Gigabytes + SectionSetSize ${SEC01} 26214400 + + + ; Check system meory size. We need at least 8GB + ; ---------------------------------------------------- + + ; allocate a few bytes of memory + System::Alloc 64 + Pop $1 + + ; Retrieve HW info from the Windows Kernel + System::Call "*$1(i64)" + System::Call "Kernel32::GlobalMemoryStatusEx(i r1)" + ; unpack the data into $R2 - $R10 + System::Call "*$1(i.r2, i.r3, l.r4, l.r5, l.r6, l.r7, l.r8, l.r9, l.r10)" + + # free up the memory + System::Free $1 + + ; Result mapping: + ; "Structure size: $2 bytes" + ; "Memory load: $3%" + ; "Total physical memory: $4 bytes" + ; "Free physical memory: $5 bytes" + ; "Total page file: $6 bytes" + ; "Free page file: $7 bytes" + ; "Total virtual: $8 bytes" + ; "Free virtual: $9 bytes" + + ; Mem size in MB + System::Int64Op $4 / 1048576 + Pop $4 + + ${If} $4 < "80000" + MessageBox MB_OK|MB_ICONEXCLAMATION "Warning!$\n$\nYour system has less than 8GB of memory (RAM).$\n$\n\ +You can still try to install Stable Diffusion UI,$\nbut it might have problems to start, or run$\nvery slowly." + ${EndIf} + FunctionEnd -Section -Post - WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "" "$INSTDIR\installer.exe" -SectionEnd \ No newline at end of file +;Section -Post +; WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "" "$INSTDIR\installer.exe" +;SectionEnd