1. 程式人生 > >Winform打包-NSIS 檢測.NetFramework版本(親測可用)

Winform打包-NSIS 檢測.NetFramework版本(親測可用)

首先介紹下,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 +1
ReadRegDWORD $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

對,就這麼多,把這些貼進去之前的指令碼,就可以搞定。