mirror of
https://github.com/easydiffusion/easydiffusion.git
synced 2024-12-26 17:08:54 +01:00
bd5a6e6fb3
- Only install on NTFS (FAT installations fail) - Ask the user to install the Media Feature Pack on Windows 10 N (fixes python cv2 errors) - Code cleanup
266 lines
9.5 KiB
Plaintext
266 lines
9.5 KiB
Plaintext
; 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"
|
|
!define PRODUCT_PUBLISHER "cmdr2 and contributors"
|
|
!define PRODUCT_WEB_SITE "https://stable-diffusion-ui.github.io"
|
|
!define PRODUCT_DIR_REGKEY "Software\Microsoft\Cmdr2\App Paths\installer.exe"
|
|
|
|
; MUI 1.67 compatible ------
|
|
!include "MUI.nsh"
|
|
!include "LogicLib.nsh"
|
|
!include "nsDialogs.nsh"
|
|
|
|
Var Dialog
|
|
Var Label
|
|
Var Button
|
|
|
|
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
|
|
; https://nsis.sourceforge.io/Check_for_spaces_in_a_directory_path
|
|
Function CheckForSpaces
|
|
Exch $R0
|
|
Push $R1
|
|
Push $R2
|
|
Push $R3
|
|
StrCpy $R1 -1
|
|
StrCpy $R3 $R0
|
|
StrCpy $R0 0
|
|
loop:
|
|
StrCpy $R2 $R3 1 $R1
|
|
IntOp $R1 $R1 - 1
|
|
StrCmp $R2 "" done
|
|
StrCmp $R2 " " 0 loop
|
|
IntOp $R0 $R0 + 1
|
|
Goto loop
|
|
done:
|
|
Pop $R3
|
|
Pop $R2
|
|
Pop $R1
|
|
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 30 characters.
|
|
; If yes, we suggest to the user to enable long filename support
|
|
;----------------------------------------------------------------------------
|
|
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.
|
|
; ----------------------------------------------------
|
|
|
|
; $R0 = CheckForSpaces( $INSTDIR )
|
|
Push $INSTDIR # Input string (install path).
|
|
Call CheckForSpaces
|
|
Pop $R0 # The function returns the number of spaces found in the input string.
|
|
|
|
; Check if any spaces exist in $INSTDIR.
|
|
${If} $R0 != 0
|
|
; Plural if more than 1 space in $INSTDIR.
|
|
; If $R0 == 1: $R1 = ""; else: $R1 = "s"
|
|
StrCmp $R0 1 0 +3
|
|
StrCpy $R1 ""
|
|
Goto +2
|
|
StrCpy $R1 "s"
|
|
|
|
; Show message box then take the user back to the Directory page.
|
|
MessageBox MB_OK|MB_ICONEXCLAMATION "Error: The Installaton directory \
|
|
has $R0 space character$R1.$\nPlease choose an installation directory without space characters."
|
|
Abort
|
|
${EndIf}
|
|
|
|
; Check for NTFS filesystem. Installations on FAT fail.
|
|
; -----------------------------------------------------
|
|
StrCpy $5 $INSTDIR 3
|
|
System::Call 'Kernel32::GetVolumeInformation(t "$5",t,i ${NSIS_MAX_STRLEN},*i,*i,*i,t.r1,i ${NSIS_MAX_STRLEN})i.r0'
|
|
${If} $0 <> 0
|
|
${AndIf} $1 == "NTFS"
|
|
MessageBox mb_ok "$5 has filesystem type '$1'.$\nOnly NTFS filesystems are supported.$\nPlease choose a different drive."
|
|
Abort
|
|
${EndIf}
|
|
|
|
FunctionEnd
|
|
|
|
|
|
;---------------------------------------------------------------------------------------------------------
|
|
; Open the MS download page in a browser and enable the [Next] button
|
|
Function MSMediaFeaturepack
|
|
ExecShell "open" "https://www.microsoft.com/en-us/software-download/mediafeaturepack"
|
|
|
|
GetDlgItem $0 $HWNDPARENT 1
|
|
EnableWindow $0 1
|
|
FunctionEnd
|
|
|
|
;---------------------------------------------------------------------------------------------------------
|
|
; Install the MS Media Feature Pack, if it is missing (e.g. on Windows 10 N)
|
|
Function MediaPackDialog
|
|
!insertmacro MUI_HEADER_TEXT "Windows Media Feature Pack" "Required software module is missing"
|
|
|
|
; Skip this dialog if mf.dll is installed
|
|
${If} ${FileExists} "$WINDIR\system32\mf.dll"
|
|
Abort
|
|
${EndIf}
|
|
|
|
nsDialogs::Create 1018
|
|
Pop $Dialog
|
|
|
|
${If} $Dialog == error
|
|
Abort
|
|
${EndIf}
|
|
|
|
${NSD_CreateLabel} 0 0 100% 48u "The Windows Media Feature Pack is missing on this computer. It is required for the Stable Diffusion UI.$\nYou can continue the installation after installing the Windows Media Feature Pack."
|
|
Pop $Label
|
|
|
|
${NSD_CreateButton} 10% 49u 80% 12u "Download Meda Feature Pack from Microsoft"
|
|
Pop $Button
|
|
|
|
GetFunctionAddress $0 MSMediaFeaturePack
|
|
nsDialogs::OnClick $Button $0
|
|
GetDlgItem $0 $HWNDPARENT 1
|
|
EnableWindow $0 0
|
|
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
|
|
Page custom MediaPackDialog
|
|
|
|
; License page
|
|
!insertmacro MUI_PAGE_LICENSE "..\LICENSE"
|
|
!insertmacro MUI_PAGE_LICENSE "..\CreativeML Open RAIL-M License"
|
|
; Directory page
|
|
!define MUI_PAGE_CUSTOMFUNCTION_LEAVE "DirectoryLeave"
|
|
!insertmacro MUI_PAGE_DIRECTORY
|
|
|
|
; Instfiles page
|
|
!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
|
|
;---------------------------------------------------------------------------------------------------------
|
|
|
|
Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
|
|
OutFile "Install Stable Diffusion UI.exe"
|
|
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"
|
|
File "..\How to install and run.txt"
|
|
File "..\LICENSE"
|
|
File "..\Start Stable Diffusion UI.cmd"
|
|
SetOutPath "$INSTDIR\scripts"
|
|
File "..\scripts\bootstrap.bat"
|
|
File "..\scripts\install_status.txt"
|
|
File "..\scripts\on_env_start.bat"
|
|
File "C:\windows\system32\curl.exe"
|
|
CreateDirectory "$INSTDIR\profile"
|
|
CreateDirectory "$SMPROGRAMS\Stable Diffusion UI"
|
|
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
|
|
|
|
|
|
; 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 < "8000"
|
|
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
|