scriptable-client-installers/tools/Examples/bigtest.nsi
2023-12-15 16:09:19 -05:00

331 lines
8.1 KiB
Plaintext

; bigtest.nsi
;
; This script attempts to test most of the functionality of the NSIS exehead.
;--------------------------------
!ifdef HAVE_UPX
!packhdr tmp.dat "upx\upx -9 tmp.dat"
!endif
!ifdef NOCOMPRESS
SetCompress off
!endif
;--------------------------------
Name "BigNSISTest"
Caption "NSIS Big Test"
Icon "${NSISDIR}\Contrib\Graphics\Icons\nsis1-install.ico"
OutFile "bigtest.exe"
SetDateSave on
SetDatablockOptimize on
CRCCheck on
SilentInstall normal
BGGradient 000000 800000 FFFFFF
InstallColors FF8080 000030
XPStyle on
InstallDir "$PROGRAMFILES\NSISTest\BigNSISTest"
InstallDirRegKey HKLM "Software\NSISTest\BigNSISTest" "Install_Dir"
CheckBitmap "${NSISDIR}\Contrib\Graphics\Checks\classic-cross.bmp"
LicenseText "A test text, make sure it's all there"
LicenseData "bigtest.nsi"
RequestExecutionLevel admin
ManifestSupportedOS all
;--------------------------------
Page license
Page components
Page directory
Page instfiles
UninstPage uninstConfirm
UninstPage instfiles
;--------------------------------
!ifndef NOINSTTYPES ; only if not defined
InstType "Most"
InstType "Full"
InstType "More"
InstType "Base"
;InstType /NOCUSTOM
;InstType /COMPONENTSONLYONCUSTOM
!endif
AutoCloseWindow false
ShowInstDetails show
;--------------------------------
Section "" ; empty string makes it hidden, so would starting with -
; write reg info
StrCpy $1 "Hello World"
DetailPrint "I like to be able to see what is going on (debug) $1"
WriteRegStr HKLM SOFTWARE\NSISTest\BigNSISTest "Install_Dir" "$INSTDIR"
; write uninstall strings
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\BigNSISTest" "DisplayName" "BigNSISTest (remove only)"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\BigNSISTest" "UninstallString" '"$INSTDIR\bt-uninst.exe"'
SetOutPath $INSTDIR
File /a "silent.nsi"
CreateDirectory "$INSTDIR\MyProjectFamily\MyProject" ; 2 recursively create a directory for fun.
WriteUninstaller "$INSTDIR\bt-uninst.exe"
Nop ; for fun
SectionEnd
Section "TempTest"
SectionIn 1 2 3
Start: MessageBox MB_OK "Start:"
MessageBox MB_YESNO "Goto MyLabel" IDYES MyLabel
MessageBox MB_OK "Right before MyLabel:"
MyLabel: MessageBox MB_OK "MyLabel:"
MessageBox MB_OK "Right after MyLabel:"
MessageBox MB_YESNO "Goto Start:?" IDYES Start
SectionEnd
SectionGroup /e SectionGroup1
Section "Test Registry/INI functions"
SectionIn 1 4 3
WriteRegStr HKLM SOFTWARE\NSISTest\BigNSISTest "StrTest_INSTDIR" "$INSTDIR"
WriteRegDword HKLM SOFTWARE\NSISTest\BigNSISTest "DwordTest_0xDEADBEEF" 0xdeadbeef
WriteRegDword HKLM SOFTWARE\NSISTest\BigNSISTest "DwordTest_123456" 123456
WriteRegDword HKLM SOFTWARE\NSISTest\BigNSISTest "DwordTest_0123" 0123
WriteRegBin HKLM SOFTWARE\NSISTest\BigNSISTest "BinTest_deadbeef01f00dbeef" "DEADBEEF01F00DBEEF"
StrCpy $8 "$SYSDIR\IniTest"
WriteINIStr "$INSTDIR\test.ini" "MySection" "Value1" $8
WriteINIStr "$INSTDIR\test.ini" "MySectionIni" "Value1" $8
WriteINIStr "$INSTDIR\test.ini" "MySectionIni" "Value2" $8
WriteINIStr "$INSTDIR\test.ini" "IniOn" "Value1" $8
Call MyFunctionTest
DeleteINIStr "$INSTDIR\test.ini" "IniOn" "Value1"
DeleteINISec "$INSTDIR\test.ini" "MySectionIni"
ReadINIStr $1 "$INSTDIR\test.ini" "MySectionIni" "Value1"
StrCmp $1 "" INIDelSuccess
MessageBox MB_OK "DeleteINISec failed"
INIDelSuccess:
ClearErrors
ReadRegStr $1 HKCR "software\microsoft" xyz_cc_does_not_exist
IfErrors 0 NoError
MessageBox MB_OK "could not read from HKCR\software\microsoft\xyz_cc_does_not_exist"
Goto ErrorYay
NoError:
MessageBox MB_OK "read '$1' from HKCR\software\microsoft\xyz_cc_does_not_exist"
ErrorYay:
SectionEnd
Section "Test CreateShortcut"
SectionIn 1 2 3
Call CSCTest
SectionEnd
SectionGroup Group2
!define ASSERT `!insertmacro ASSERT "${U+24}{__FILE__}" ${U+24}{__LINE__} `
!macro ASSERT __file __line __xpr
${__xpr} +2
MessageBox MB_ICONSTOP `ASSERT: ${__xpr} (${__file}:${__line})`
!macroend
Section "Integer"
IntOp $0 0xffffffff >> 31
${ASSERT} `IntCmpU $0 -1`
IntOp $0 0xffffffff >>> 31
${ASSERT} `IntCmpU $0 1`
IntOp $0 1 << 31
${ASSERT} `IntCmpU $0 0x80000000`
IntOp $0 0x80000000 ^ 0x40000000
${ASSERT} `IntCmpU $0 0xC0000000`
ClearErrors
IntOp $0 1 / 0
${ASSERT} `IfErrors ` ; Division by zero must set the error flag
${ASSERT} `IntCmpU $0 0` ; Unspecified result, hopefully it's zero
SectionEnd
Section "Test Branching"
BeginTestSection:
SectionIn 1 2 3
SetOutPath $INSTDIR
IfFileExists "$INSTDIR\LogicLib.nsi" 0 BranchTest69
MessageBox MB_YESNO|MB_ICONQUESTION "Would you like to overwrite $INSTDIR\LogicLib.nsi?" IDNO NoOverwrite ; skipped if file doesn't exist
BranchTest69:
SetOverwrite ifnewer ; NOT AN INSTRUCTION, NOT COUNTED IN SKIPPINGS
NoOverwrite:
File "LogicLib.nsi" ; skipped if answered no
SetOverwrite try ; NOT AN INSTRUCTION, NOT COUNTED IN SKIPPINGS
MessageBox MB_YESNO|MB_ICONQUESTION "Would you like to skip the rest of this section?" IDYES EndTestBranch
MessageBox MB_YESNO|MB_ICONQUESTION "Would you like to go back to the beginning of this section?" IDYES BeginTestSection
MessageBox MB_YESNO|MB_ICONQUESTION "Would you like to hide the installer and wait five seconds?" IDNO NoHide
HideWindow
Sleep 5000
BringToFront
NoHide:
MessageBox MB_YESNO|MB_ICONQUESTION "Would you like to call the function 5 times?" IDNO NoRecurse
StrCpy $1 "x"
LoopTest:
Call myfunc
StrCpy $1 "x$1"
StrCmp $1 "xxxxxx" 0 LoopTest
NoRecurse:
EndTestBranch:
SectionEnd
SectionGroupEnd
Section "Test CopyFiles"
SectionIn 1 2 3
SetOutPath $INSTDIR\cpdest
CopyFiles "$WINDIR\*.ini" "$INSTDIR\cpdest" 0
SectionEnd
SectionGroupEnd
Section "Test Exec functions" TESTIDX
SectionIn 1 2 3
SearchPath $1 notepad.exe
MessageBox MB_OK "notepad.exe=$1"
Exec '"$1"'
ExecShell "open" '"$INSTDIR"'
Sleep 500
BringToFront
SectionEnd
Section "Test ActiveX control registration"
SectionIn 2
UnRegDLL "$SYSDIR\spin32.ocx"
Sleep 1000
RegDLL "$SYSDIR\spin32.ocx"
Sleep 1000
SectionEnd
;--------------------------------
Function "CSCTest"
CreateDirectory "$SMPROGRAMS\Big NSIS Test"
SetOutPath $INSTDIR ; for working directory
CreateShortcut "$SMPROGRAMS\Big NSIS Test\Uninstall BIG NSIS Test.lnk" "$INSTDIR\bt-uninst.exe" ; use defaults for parameters, icon, etc.
; this one will use notepad's icon, start it minimized, and give it a hotkey (of Ctrl+Shift+Q)
CreateShortcut "$SMPROGRAMS\Big NSIS Test\silent.nsi.lnk" "$INSTDIR\silent.nsi" "" "$WINDIR\notepad.exe" 0 SW_SHOWMINIMIZED CONTROL|SHIFT|Q
CreateShortcut "$SMPROGRAMS\Big NSIS Test\TheDir.lnk" "$INSTDIR\" "" "" 0 SW_SHOWMAXIMIZED CONTROL|SHIFT|Z
FunctionEnd
Function myfunc
StrCpy $2 "MyTestVar=$1"
MessageBox MB_OK "myfunc: $2"
FunctionEnd
Function MyFunctionTest
ReadINIStr $1 "$INSTDIR\test.ini" "MySectionIni" "Value1"
StrCmp $1 $8 NoFailedMsg
MessageBox MB_OK "WriteINIStr failed"
NoFailedMsg:
FunctionEnd
Function .onSelChange
SectionGetText ${TESTIDX} $0
StrCmp $0 "" e
SectionSetText ${TESTIDX} ""
Goto e2
e:
SectionSetText ${TESTIDX} "TextInSection"
e2:
FunctionEnd
;--------------------------------
; Uninstaller
UninstallText "This will uninstall example2. Hit next to continue."
UninstallIcon "${NSISDIR}\Contrib\Graphics\Icons\nsis1-uninstall.ico"
Section "Uninstall"
DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\BigNSISTest"
DeleteRegKey HKLM "SOFTWARE\NSISTest\BigNSISTest"
Delete "$INSTDIR\silent.nsi"
Delete "$INSTDIR\LogicLib.nsi"
Delete "$INSTDIR\bt-uninst.exe"
Delete "$INSTDIR\test.ini"
Delete "$SMPROGRAMS\Big NSIS Test\*.*"
RMDir "$SMPROGRAMS\BiG NSIS Test"
MessageBox MB_YESNO|MB_ICONQUESTION "Would you like to remove the directory $INSTDIR\cpdest?" IDNO NoDelete
Delete "$INSTDIR\cpdest\*.*"
RMDir "$INSTDIR\cpdest" ; skipped if no
NoDelete:
RMDir "$INSTDIR\MyProjectFamily\MyProject"
RMDir "$INSTDIR\MyProjectFamily"
RMDir "$INSTDIR"
IfFileExists "$INSTDIR" 0 NoErrorMsg
MessageBox MB_OK "Note: $INSTDIR could not be removed!" IDOK 0 ; skipped if file doesn't exist
NoErrorMsg:
SectionEnd