NSIS的官方地址是:http://nsis.sourceforge.net/Main_Page
NSIS的是:http://nsis.sourceforge.net/Download,
NSIS的協助文檔是:http://nsis.sourceforge.net/Docs/
判斷DotNetFrameWork是否安裝,可以自己添加如下的代碼:
;f2.0
Function .onInit
call isStepFramework
FunctionEnd
Function isStepFramework
ReadRegStr $0 HKLM SOFTWARE/Microsoft/.NETFramework/policy/v2.0 "50727"
StrCmp $0 "50727-50727" 0 +2
Return ;相同
SetOutPath "$DOCUMENTS"
File "setupRelease/dotnetfx.exe"
ExecWait '"$DOCUMENTS/dotnetfx.exe"'
FunctionEnd
Function IsNetfx35Installed
;Check is Net 3.5 is install
;Push 0 for true, Pop -1 for false
${registry::Read} "HKEY_LOCAL_MACHINE/Software/Microsoft/NET Framework Setup/NDP/v3.5" "SP" $R0 $R1
${If} $R1 == ""
Push -1
${Else}
Push 0
${EndIf}
FunctionEnd
這是一個定義函數,他首先可以使用${registry::Read}來讀取註冊表中的值,並放入$R0 $R1,分別是類型和值,判斷擷取的值是不是為空白,就可以判斷是不是安裝過.NET Framework 3.5了。
安裝.NET Framework 3.5:
Function InstallDotNetFx
SetOutPath "$PLUGINSDIR"
Banner::show /NOUNLOAD "正在安裝.NET運行庫,請耐心等待..."
ExecWait '"$EXEDIR/DotNetFX35/dotNetFx35setup.exe"' $0
pop $0
${If} $0 != "0"
Banner::destroy
abort
${EndIf}
Banner::destroy
FunctionEnd
這是.NET Framework 3.5的安裝,我選擇了dotNetFx3.5的離線安裝包,並將其放在安裝檔案的目錄下,這樣可以不把
.NET Framework 3.5打包到程式中,減少程式的大小。$EXEDIR是NSIS的內部程式常量,可以擷取安裝檔案的目錄。而且他還提供了很多的內部宏和常量。
外掛程式的自作,需要訪問已經安裝的程式目錄,這就要使用對其註冊表的方法,將程式的安裝目錄擷取,對於NSIS,這也是相當的簡單的。
首先在安裝目錄的最上方:
InstallDir "$PROGRAMFILES/Test"
修改為:
InstallDirRegKey HKLM "SOFTWARE/Test" "Path"
然後在Function .onInit中添加如下的內容:
StrCmp $INSTDIR "" 0 Continue
MessageBox MB_OK|MB_ICONSTOP "Test 未安裝,請先安裝Test。"
Abort
Continue:
相當的簡單。