mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	Add NSIS installer scripting language
This commit is contained in:
		| @@ -818,6 +818,9 @@ MoonScript: | ||||
| Myghty: | ||||
|   primary_extension: .myt | ||||
|  | ||||
| NSIS: | ||||
|   primary_extension: .nsi | ||||
|  | ||||
| Nemerle: | ||||
|   type: programming | ||||
|   color: "#0d3c6e" | ||||
|   | ||||
							
								
								
									
										308
									
								
								samples/NSIS/bigtest.nsi
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										308
									
								
								samples/NSIS/bigtest.nsi
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,308 @@ | ||||
| ; 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 | ||||
|  | ||||
| ;-------------------------------- | ||||
|  | ||||
| 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 "POOOOOOOOOOOP" | ||||
|   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 "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 | ||||
|  | ||||
| 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 | ||||
							
								
								
									
										54
									
								
								samples/NSIS/x64.nsh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								samples/NSIS/x64.nsh
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,54 @@ | ||||
| ; --------------------- | ||||
| ;       x64.nsh | ||||
| ; --------------------- | ||||
| ; | ||||
| ; A few simple macros to handle installations on x64 machines. | ||||
| ; | ||||
| ; RunningX64 checks if the installer is running on x64. | ||||
| ; | ||||
| ;   ${If} ${RunningX64} | ||||
| ;     MessageBox MB_OK "running on x64" | ||||
| ;   ${EndIf} | ||||
| ; | ||||
| ; DisableX64FSRedirection disables file system redirection. | ||||
| ; EnableX64FSRedirection enables file system redirection. | ||||
| ; | ||||
| ;   SetOutPath $SYSDIR | ||||
| ;   ${DisableX64FSRedirection} | ||||
| ;   File some.dll # extracts to C:\Windows\System32 | ||||
| ;   ${EnableX64FSRedirection} | ||||
| ;   File some.dll # extracts to C:\Windows\SysWOW64 | ||||
| ; | ||||
|  | ||||
| !ifndef ___X64__NSH___ | ||||
| !define ___X64__NSH___ | ||||
|  | ||||
| !include LogicLib.nsh | ||||
|  | ||||
| !macro _RunningX64 _a _b _t _f | ||||
|   !insertmacro _LOGICLIB_TEMP | ||||
|   System::Call kernel32::GetCurrentProcess()i.s | ||||
|   System::Call kernel32::IsWow64Process(is,*i.s) | ||||
|   Pop $_LOGICLIB_TEMP | ||||
|   !insertmacro _!= $_LOGICLIB_TEMP 0 `${_t}` `${_f}` | ||||
| !macroend | ||||
|  | ||||
| !define RunningX64 `"" RunningX64 ""` | ||||
|  | ||||
| !macro DisableX64FSRedirection | ||||
|  | ||||
|   System::Call kernel32::Wow64EnableWow64FsRedirection(i0) | ||||
|  | ||||
| !macroend | ||||
|  | ||||
| !define DisableX64FSRedirection "!insertmacro DisableX64FSRedirection" | ||||
|  | ||||
| !macro EnableX64FSRedirection | ||||
|  | ||||
|   System::Call kernel32::Wow64EnableWow64FsRedirection(i1) | ||||
|  | ||||
| !macroend | ||||
|  | ||||
| !define EnableX64FSRedirection "!insertmacro EnableX64FSRedirection" | ||||
|  | ||||
| !endif # !___X64__NSH___ | ||||
		Reference in New Issue
	
	Block a user