NSIS 使用技巧


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

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM