1. 在安裝過程中顯示DetailPrint調試信息
DetailPrint默認是不顯示的,如果要讓其print的信息顯示,需在NSIS的腳本起始處添加 ShowInstDetails show
Name "nsExec Test" OutFile "nsExec Test.exe" ShowInstDetails show Section "Output to variable" nsExec::ExecToStack '"${NSISDIR}\makensis.exe" /VERSION' Pop $0 # return value/error/timeout Pop $1 # printed text, up to ${NSIS_MAX_STRLEN} DetailPrint '"${NSISDIR}\makensis.exe" /VERSION printed: $1' DetailPrint "" DetailPrint " Return value: $0" DetailPrint "" SectionEnd
2. NSIS中 +2, +3等跳轉到底是跳轉幾行?
一直對NSIS中條件跳轉 +2,+3等比較模糊,即使當時弄清楚了,過段時間又忘了。現做一個test,將結果記下。
IfFileExists D:\SA\test\testdirectory\*.* 0 +1 是判斷testdirectory是否是一個目錄,若是,則執行0,若不是,則執行+1。
測試條件:不存在testdirectory目錄。
Name "test" OutFile "Test.exe" ShowInstDetails show Section "test" DetailPrint "Function readConfig" IfFileExists D:\SA\test\testdirectory\*.* 0 +1 DetailPrint "IfFileExists +1" DetailPrint "IfFileExists +2" DetailPrint "IfFileExists +3" DetailPrint "IfFileExists +4" SectionEnd
(1)IfFileExists D:\SA\test\testdirectory\*.* 0 +1
執行結果為:
IfFileExists +1
IfFileExists +2
IfFileExists +3
IfFileExists +4
(2)IfFileExists D:\SA\test\testdirectory\*.* 0 +2
執行結果為:
IfFileExists +2
IfFileExists +3
IfFileExists +4
(3)如果將腳本改為:
Name "test" OutFile "Test.exe" ShowInstDetails show Section "test" DetailPrint "Function readConfig" IfFileExists D:\SA\test\testdirectory\*.* 0 +3 DetailPrint "IfFileExists +1"
DetailPrint "IfFileExists +2"
DetailPrint "IfFileExists +3"
DetailPrint "IfFileExists +4" SectionEnd
預期的執行結果為:
IfFileExists +2
IfFileExists +3
IfFileExists +4
但實際的執行結果卻為:
IfFileExists +3
IfFileExists +4
可見,空行在編譯后會被濾掉,並不會影響+3所影響的行數。
3. NSIS中禁止Silverlight自動更新
Silverlight 安裝后默認是自動更新的。百度百科中 更改更新設置 一節(http://baike.baidu.com/view/904726.htm)
右鍵單擊Microsoft Silverlight當前顯示的內容,然后選擇“Silverlight配置”。
選擇“更新”選項卡。
選擇以下某個選項:
(0)自動安裝更新(推薦) - 如果選中此選項,您的計算機將自動安裝最新的修補程序、全新的功能以及升級程序,從而保持計算機處於最新狀態。這是 Microsoft Silverlight 的默認設置。
(1)檢查更新,但是讓我選擇是否下載和安裝更新 - 如果選中此選項,則可以下載更新並將其安裝到您的計算機上時,系統將向您發出通知。
(2)從不檢查更新(不推薦) - 您將不會收到有關任何修補程序(包括安全修補程序)、功能或升級程序的通知。
在企業環境中,管理員可以配置組策略來防止 Microsoft Silverlight 自動更新。可以創建一個注冊表項 HKLM\Software\Microsoft\Silverlight,其值名稱為 UpdateMode,值類型為 DWORD,給定的值為 0x00000002。此設置將指示計算機不檢查自動更新。
Silverlight在安裝后,注冊表中已存在更新設置的注冊表項:UpdateConsentMode.其默認值為:0,自動安裝更新。我們可以將它改為2.
# The Silverlight's AutoUpdate is on by default(0x0). Change it to disable mode(0x2) ${If} ${RunningX64} WriteRegDWORD HKLM "SOFTWARE\Wow6432Node\Microsoft\Silverlight" "UpdateConsentMode" 0x2 ${Else} WriteRegDWORD HKLM "SOFTWARE\Microsoft\Silverlight" "UpdateConsentMode" 0x2 ${EndIf}
4. NSIS中如何記錄Log?
(1)可以通過插件:
比如NSISLog plug-in,LogEx plug-in等。一般LogEx比較常用。
(2)NSIS內置支持Log功能
NSIS內置是支持Log功能的,但是官方下載的NSIS安裝文件(比如 nsis-2.46-setup.exe)中並不包含Log功能(目的是為了減小NSIS文件大小)。
你可以下載NSIS的源碼,重新編譯NSIS生成exe,編譯時要對編譯命令行做一些設置:
scons NSIS_CONFIG_LOG=yes PREFIX=C:\somewhere install-compiler install-stubs
另外,如果嫌自己編譯太麻煩,可以下載已編譯好的patch,替換NSIS安裝目錄下的相應文件(參考http://nsis.sourceforge.net/Special_Builds,下載“Download advanced logging build”下的patch)。解壓后覆蓋NSIS安裝目錄“C:\Program Files (x86)\NSIS”下的相應文件(參考http://stackoverflow.com/questions/861297/saving-nsis-install-log)。
5. NSIS 檢測Desktop-Experiemce狀態並安裝
WinServer 2008的Desktop Experience不是默認安裝的。可以使用PowerShell的cmdlet命令檢測他的安裝狀態,若沒有安裝,則安裝之。
1. 可以使用get-command命令加上 通配符參數 來獲取Feature具體名字。
2. 使用Get-WondowsFeature 可獲取Feature的安裝狀態,如果不帶參數則可獲取所有Feature的安裝狀態。若該Feature已安裝,則其前面會帶有一個[X]標志。
3.在NSIS中,可以使用nsExec來執行PowerShell程序來完成檢測和安裝。
具體使用方法,可參考: http://stackoverflow.com/questions/13391340/how-to-call-powershell-in-nsis