mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	Merge pull request #423 from gentoo90/nsis-lexer
Add NSIS installer scripting language
This commit is contained in:
		| @@ -825,6 +825,11 @@ MoonScript: | |||||||
| Myghty: | Myghty: | ||||||
|   primary_extension: .myt |   primary_extension: .myt | ||||||
|  |  | ||||||
|  | NSIS: | ||||||
|  |   primary_extension: .nsi | ||||||
|  |   extensions: | ||||||
|  |   - .nsh | ||||||
|  |  | ||||||
| Nemerle: | Nemerle: | ||||||
|   type: programming |   type: programming | ||||||
|   color: "#0d3c6e" |   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