home *** CD-ROM | disk | FTP | other *** search
/ Hackers Magazine 57 / CdHackersMagazineNr57.iso / Software / Programming / nsis-2.46-setup.exe / Examples / bigtest.nsi next >
Encoding:
NSIS script  |  2009-01-13  |  7.8 KB  |  309 lines

  1. ; bigtest.nsi
  2. ;
  3. ; This script attempts to test most of the functionality of the NSIS exehead.
  4.  
  5. ;--------------------------------
  6.  
  7. !ifdef HAVE_UPX
  8. !packhdr tmp.dat "upx\upx -9 tmp.dat"
  9. !endif
  10.  
  11. !ifdef NOCOMPRESS
  12. SetCompress off
  13. !endif
  14.  
  15. ;--------------------------------
  16.  
  17. Name "BigNSISTest"
  18. Caption "NSIS Big Test"
  19. Icon "${NSISDIR}\Contrib\Graphics\Icons\nsis1-install.ico"
  20. OutFile "bigtest.exe"
  21.  
  22. SetDateSave on
  23. SetDatablockOptimize on
  24. CRCCheck on
  25. SilentInstall normal
  26. BGGradient 000000 800000 FFFFFF
  27. InstallColors FF8080 000030
  28. XPStyle on
  29.  
  30. InstallDir "$PROGRAMFILES\NSISTest\BigNSISTest"
  31. InstallDirRegKey HKLM "Software\NSISTest\BigNSISTest" "Install_Dir"
  32.  
  33. CheckBitmap "${NSISDIR}\Contrib\Graphics\Checks\classic-cross.bmp"
  34.  
  35. LicenseText "A test text, make sure it's all there"
  36. LicenseData "bigtest.nsi"
  37.  
  38. RequestExecutionLevel admin
  39.  
  40. ;--------------------------------
  41.  
  42. Page license
  43. Page components
  44. Page directory
  45. Page instfiles
  46.  
  47. UninstPage uninstConfirm
  48. UninstPage instfiles
  49.  
  50. ;--------------------------------
  51.  
  52. !ifndef NOINSTTYPES ; only if not defined
  53.   InstType "Most"
  54.   InstType "Full"
  55.   InstType "More"
  56.   InstType "Base"
  57.   ;InstType /NOCUSTOM
  58.   ;InstType /COMPONENTSONLYONCUSTOM
  59. !endif
  60.  
  61. AutoCloseWindow false
  62. ShowInstDetails show
  63.  
  64. ;--------------------------------
  65.  
  66. Section "" ; empty string makes it hidden, so would starting with -
  67.  
  68.   ; write reg info
  69.   StrCpy $1 "POOOOOOOOOOOP"
  70.   DetailPrint "I like to be able to see what is going on (debug) $1"
  71.   WriteRegStr HKLM SOFTWARE\NSISTest\BigNSISTest "Install_Dir" "$INSTDIR"
  72.  
  73.   ; write uninstall strings
  74.   WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\BigNSISTest" "DisplayName" "BigNSISTest (remove only)"
  75.   WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\BigNSISTest" "UninstallString" '"$INSTDIR\bt-uninst.exe"'
  76.  
  77.   SetOutPath $INSTDIR
  78.   File /a "silent.nsi"
  79.   CreateDirectory "$INSTDIR\MyProjectFamily\MyProject" ; 2 recursively create a directory for fun.
  80.   WriteUninstaller "bt-uninst.exe"
  81.   
  82.   Nop ; for fun
  83.  
  84. SectionEnd
  85.  
  86. Section "TempTest"
  87.  
  88. SectionIn 1 2 3
  89.   Start: MessageBox MB_OK "Start:"
  90.  
  91.   MessageBox MB_YESNO "Goto MyLabel" IDYES MyLabel
  92.  
  93.   MessageBox MB_OK "Right before MyLabel:"
  94.  
  95.   MyLabel: MessageBox MB_OK "MyLabel:"
  96.   
  97.   MessageBox MB_OK "Right after MyLabel:"
  98.  
  99.   MessageBox MB_YESNO "Goto Start:?" IDYES Start
  100.  
  101. SectionEnd
  102.  
  103. SectionGroup /e SectionGroup1
  104.  
  105. Section "Test Registry/INI functions"
  106.  
  107. SectionIn 1 4 3
  108.  
  109.   WriteRegStr HKLM SOFTWARE\NSISTest\BigNSISTest "StrTest_INSTDIR" "$INSTDIR"
  110.   WriteRegDword HKLM SOFTWARE\NSISTest\BigNSISTest "DwordTest_0xDEADBEEF" 0xdeadbeef
  111.   WriteRegDword HKLM SOFTWARE\NSISTest\BigNSISTest "DwordTest_123456" 123456
  112.   WriteRegDword HKLM SOFTWARE\NSISTest\BigNSISTest "DwordTest_0123" 0123
  113.   WriteRegBin HKLM SOFTWARE\NSISTest\BigNSISTest "BinTest_deadbeef01f00dbeef" "DEADBEEF01F00DBEEF"
  114.   StrCpy $8 "$SYSDIR\IniTest"
  115.   WriteINIStr "$INSTDIR\test.ini"  "MySection" "Value1" $8
  116.   WriteINIStr "$INSTDIR\test.ini"  "MySectionIni" "Value1" $8
  117.   WriteINIStr "$INSTDIR\test.ini"  "MySectionIni" "Value2" $8
  118.   WriteINIStr "$INSTDIR\test.ini"  "IniOn" "Value1" $8
  119.  
  120.   Call MyFunctionTest
  121.  
  122.   DeleteINIStr "$INSTDIR\test.ini" "IniOn" "Value1"
  123.   DeleteINISec "$INSTDIR\test.ini" "MySectionIni"
  124.  
  125.   ReadINIStr $1 "$INSTDIR\test.ini" "MySectionIni" "Value1"
  126.   StrCmp $1 "" INIDelSuccess
  127.     MessageBox MB_OK "DeleteINISec failed"
  128.   INIDelSuccess:
  129.  
  130.   ClearErrors
  131.   ReadRegStr $1 HKCR "software\microsoft" xyz_cc_does_not_exist
  132.   IfErrors 0 NoError
  133.     MessageBox MB_OK "could not read from HKCR\software\microsoft\xyz_cc_does_not_exist"
  134.     Goto ErrorYay
  135.   NoError:
  136.     MessageBox MB_OK "read '$1' from HKCR\software\microsoft\xyz_cc_does_not_exist"
  137.   ErrorYay:
  138.   
  139. SectionEnd
  140.  
  141. Section "Test CreateShortCut"
  142.  
  143.   SectionIn 1 2 3
  144.  
  145.   Call CSCTest
  146.  
  147. SectionEnd
  148.  
  149. SectionGroup Group2
  150.  
  151. Section "Test Branching" 
  152.   
  153.   BeginTestSection:
  154.   SectionIn 1 2 3
  155.  
  156.   SetOutPath $INSTDIR
  157.  
  158.   IfFileExists "$INSTDIR\LogicLib.nsi" 0 BranchTest69
  159.     
  160.     MessageBox MB_YESNO|MB_ICONQUESTION "Would you like to overwrite $INSTDIR\LogicLib.nsi?" IDNO NoOverwrite ; skipped if file doesn't exist
  161.  
  162.     BranchTest69:
  163.   
  164.     SetOverwrite ifnewer ; NOT AN INSTRUCTION, NOT COUNTED IN SKIPPINGS
  165.  
  166.   NoOverwrite:
  167.  
  168.   File "LogicLib.nsi" ; skipped if answered no
  169.   SetOverwrite try ; NOT AN INSTRUCTION, NOT COUNTED IN SKIPPINGS
  170.  
  171.   MessageBox MB_YESNO|MB_ICONQUESTION "Would you like to skip the rest of this section?" IDYES EndTestBranch
  172.   MessageBox MB_YESNO|MB_ICONQUESTION "Would you like to go back to the beginning of this section?" IDYES BeginTestSection
  173.   MessageBox MB_YESNO|MB_ICONQUESTION "Would you like to hide the installer and wait five seconds?" IDNO NoHide
  174.  
  175.     HideWindow
  176.     Sleep 5000
  177.     BringToFront
  178.  
  179.   NoHide:
  180.  
  181.   MessageBox MB_YESNO|MB_ICONQUESTION "Would you like to call the function 5 times?" IDNO NoRecurse
  182.  
  183.     StrCpy $1 "x"
  184.  
  185.   LoopTest: 
  186.       
  187.     Call myfunc
  188.     StrCpy $1 "x$1"
  189.     StrCmp $1 "xxxxxx" 0 LoopTest
  190.       
  191.   NoRecurse:
  192.  
  193.   EndTestBranch:
  194.  
  195. SectionEnd
  196.  
  197. SectionGroupEnd
  198.  
  199. Section "Test CopyFiles"
  200.  
  201.   SectionIn 1 2 3
  202.  
  203.   SetOutPath $INSTDIR\cpdest
  204.   CopyFiles "$WINDIR\*.ini" "$INSTDIR\cpdest" 0
  205.  
  206. SectionEnd
  207.  
  208. SectionGroupEnd
  209.  
  210. Section "Test Exec functions" TESTIDX
  211.  
  212.   SectionIn 1 2 3
  213.   
  214.   SearchPath $1 notepad.exe
  215.  
  216.   MessageBox MB_OK "notepad.exe=$1"
  217.   Exec '"$1"'
  218.   ExecShell "open" '"$INSTDIR"'
  219.   Sleep 500
  220.   BringToFront
  221.  
  222. SectionEnd
  223.  
  224. Section "Test ActiveX control registration"
  225.  
  226.   SectionIn 2
  227.  
  228.   UnRegDLL "$SYSDIR\spin32.ocx"
  229.   Sleep 1000
  230.   RegDLL "$SYSDIR\spin32.ocx"
  231.   Sleep 1000
  232.   
  233. SectionEnd
  234.  
  235. ;--------------------------------
  236.  
  237. Function "CSCTest"
  238.   
  239.   CreateDirectory "$SMPROGRAMS\Big NSIS Test"
  240.   SetOutPath $INSTDIR ; for working directory
  241.   CreateShortCut "$SMPROGRAMS\Big NSIS Test\Uninstall BIG NSIS Test.lnk" "$INSTDIR\bt-uninst.exe" ; use defaults for parameters, icon, etc.
  242.   ; this one will use notepad's icon, start it minimized, and give it a hotkey (of Ctrl+Shift+Q)
  243.   CreateShortCut "$SMPROGRAMS\Big NSIS Test\silent.nsi.lnk" "$INSTDIR\silent.nsi" "" "$WINDIR\notepad.exe" 0 SW_SHOWMINIMIZED CONTROL|SHIFT|Q
  244.   CreateShortCut "$SMPROGRAMS\Big NSIS Test\TheDir.lnk" "$INSTDIR\" "" "" 0 SW_SHOWMAXIMIZED CONTROL|SHIFT|Z
  245.  
  246. FunctionEnd
  247.  
  248. Function myfunc
  249.  
  250.   StrCpy $2 "MyTestVar=$1"
  251.   MessageBox MB_OK "myfunc: $2"
  252.  
  253. FunctionEnd
  254.  
  255. Function MyFunctionTest
  256.  
  257.   ReadINIStr $1 "$INSTDIR\test.ini" "MySectionIni" "Value1"
  258.   StrCmp $1 $8 NoFailedMsg
  259.     MessageBox MB_OK "WriteINIStr failed"
  260.   
  261.   NoFailedMsg:
  262.  
  263. FunctionEnd
  264.  
  265. Function .onSelChange
  266.  
  267.   SectionGetText ${TESTIDX} $0
  268.   StrCmp $0 "" e
  269.     SectionSetText ${TESTIDX} ""
  270.   Goto e2
  271. e:
  272.   SectionSetText ${TESTIDX} "TextInSection"
  273. e2:
  274.  
  275. FunctionEnd
  276.  
  277. ;--------------------------------
  278.  
  279. ; Uninstaller
  280.  
  281. UninstallText "This will uninstall example2. Hit next to continue."
  282. UninstallIcon "${NSISDIR}\Contrib\Graphics\Icons\nsis1-uninstall.ico"
  283.  
  284. Section "Uninstall"
  285.  
  286.   DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\BigNSISTest"
  287.   DeleteRegKey HKLM "SOFTWARE\NSISTest\BigNSISTest"
  288.   Delete "$INSTDIR\silent.nsi"
  289.   Delete "$INSTDIR\LogicLib.nsi"
  290.   Delete "$INSTDIR\bt-uninst.exe"
  291.   Delete "$INSTDIR\test.ini"
  292.   Delete "$SMPROGRAMS\Big NSIS Test\*.*"
  293.   RMDir "$SMPROGRAMS\BiG NSIS Test"
  294.   
  295.   MessageBox MB_YESNO|MB_ICONQUESTION "Would you like to remove the directory $INSTDIR\cpdest?" IDNO NoDelete
  296.     Delete "$INSTDIR\cpdest\*.*"
  297.     RMDir "$INSTDIR\cpdest" ; skipped if no
  298.   NoDelete:
  299.   
  300.   RMDir "$INSTDIR\MyProjectFamily\MyProject"
  301.   RMDir "$INSTDIR\MyProjectFamily"
  302.   RMDir "$INSTDIR"
  303.  
  304.   IfFileExists "$INSTDIR" 0 NoErrorMsg
  305.     MessageBox MB_OK "Note: $INSTDIR could not be removed!" IDOK 0 ; skipped if file doesn't exist
  306.   NoErrorMsg:
  307.  
  308. SectionEnd
  309.