Winform打包-NSIS 檢測.NetFramework版本(親測可用)
阿新 • • 發佈:2018-12-16
首先介紹下,HM NIS Edit工具,是一款已非常簡潔好用的winform打包工具,功能強大,外掛豐富,還有豐富的第三方介面庫支援。
隨著C/S模式開發的越來越少,這方面的資料,尤其是NSIS的資料都極其稀少。翻了很多文章,進行整合,終於找到比較滿意的.NetFramework檢測,並安裝的實現方式。
進入正題,網上查了很多資料遇到問題:版本號對比一直無效,後來改為了用內建的版本號對比函式。
程式碼如下:
頭部一定記得新增:!include "WordFunc.nsh"。看名稱就是字串操作之類的。
1.檢測.NetFramework版本(讀取登錄檔,這裡與網上絕大多數資料一樣)
Function GetNetFrameworkVersion ;獲取.Net Framework版本支援 Push $1 Push $0 ReadRegDWORD $0 HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full""Install" ReadRegDWORD $1 HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full""Version" StrCmp $0 1 KnowNetFrameworkVersion +1 ReadRegDWORD $0 HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5""Install" ReadRegDWORD $1 HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5""Version" StrCmp $0 1 KnowNetFrameworkVersion +1 ReadRegDWORD $0 HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.0\Setup" "InstallSuccess" ReadRegDWORD $1 HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.0\Setup" "Version" StrCmp $0 1 KnowNetFrameworkVersion +1ReadRegDWORD $0 HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v2.0.50727" "Install" ReadRegDWORD $1 HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v2.0.50727" "Version" StrCmp $1 "" +1 +2 StrCpy $1 "2.0.50727.832" StrCmp $0 1 KnowNetFrameworkVersion +1 ReadRegDWORD $0 HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v1.1.4322" "Install" ReadRegDWORD $1 HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v1.1.4322" "Version" StrCmp $1 "" +1 +2 StrCpy $1 "1.1.4322.573" StrCmp $0 1 KnowNetFrameworkVersion +1 ReadRegDWORD $0 HKLM "SOFTWARE\Microsoft\.NETFramework\policy\v1.0""Install" ReadRegDWORD $1 HKLM "SOFTWARE\Microsoft\.NETFramework\policy\v1.0""Version" StrCmp $1 "" +1 +2 StrCpy $1 "1.0.3705.0" StrCmp $0 1 KnowNetFrameworkVersion +1 StrCpy $1 "not .NetFramework" KnowNetFrameworkVersion: Pop $0 Exch $1 FunctionEnd
2.比較版本,並進行安裝。(網上很多使用If判斷的測試沒有效果,所以使用指令碼內建的版本號比較方法)
Section - "比較版本號" DetailPrint "正在檢測安裝環境..." Call GetNetFrameworkVersion Pop $R1 ${VersionCompare} "4.5.2" "$R1" $R2 ${If} $R2 == 0 DetailPrint "當前版本($R1),無需安裝元件" ${ElseIf} $R2 == 1 DetailPrint "當前元件版本($R1)過低,需要安裝(4.5.2)版本的元件" ${ElseIf} $R2 == 2 DetailPrint "當前版本($R1),無需安裝元件" ${EndIf} SectionEnd Section -.NET Call GetNetFrameworkVersion Pop $R1 ${VersionCompare} "4.5.2" $R1 $R2 ${If} $R2 == 1 MessageBox MB_ICONINFORMATION|MB_OK "檢測到當前系統缺少微軟.NetFramework 4.5.2元件,需要進行安裝,此操作有可能引起防毒軟體誤報。" SetDetailsPrint textonly DetailPrint "準備安裝.NetFramework 4.5.2元件" SetDetailsPrint listonly SetOutPath "$TEMP" SetOverwrite on File "Src\NETFramework4.5.2.exe" ExecWait '$TEMP\NETFramework4.5.2.exe ' $R1 Delete "$TEMP\NETFramework4.5.2.exe" ${EndIf} SectionEnd
對,就這麼多,把這些貼進去之前的指令碼,就可以搞定。