NSIS:檢測本機.Net Framework版本
阿新 • • 發佈:2019-01-11
為了實現檢測本機.Net Framework版本並在線下載安裝,我找到了這篇文章
主要函式是GetNetFrameworkVersion。作用是獲取本機.Net Framework最高版本號。
但是它忽略了.Net CLR版本的問題。先來看張圖
圖中顯示CLR版本只有3個:1.1、2.0、4
參考微軟官網說明其實還有一個1.0(https://msdn.microsoft.com/zh-cn/library/bb822049.aspx)
在實際使用中,需要根據程式依賴的CLR版本來安裝對應的.Net Framework版本,而不是像文章開始提到的GetNetFrameworkVersion函式那樣,檢測到最高版本就完事了。
打個比方,我現在有個程式Hello.exe是通過.Net Framework 3.0來進行開發的,對應依賴CLR為2.0版本,那麼我就應該安裝基於CLR 2.0的.Net版本,而不能安裝基於CLR 4的.Net版本。
而如果採用GetNetFrameworkVersion的檢測辦法,我可能獲取到4.x版本,邏輯上大於2.0,就認為是安裝了.Net Framework,但是程式執行時提示需要某個版本的錯誤。
所以,我們在檢測時應該以CLR版本來檢測
另外附上一個小工具,用來檢測本機.Net Framework版本情況(http://www.asoft.be/prod_netver.html); 獲取本機CLR 2.0的最高.Net版本 Function GetNetCLR2Version nsVariables::Save 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 $0 1 KnowNetFrameworkVersion +1 StrCpy $1 "0" KnowNetFrameworkVersion: Push $1 nsVariables::Load FunctionEnd ; 獲取本機CLR 4的最高.Net版本 Function GetNetCLR4Version nsVariables::Save 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 +2 +1 StrCpy $1 "0" Push $1 nsVariables::Load FunctionEnd