您的位置:首页 > 其它

NSIS:检测本机.Net Framework版本

2016-07-03 11:50 603 查看
为了实现检测本机.Net Framework版本并在线下载安装,我找到了这篇文章

http://my.oschina.net/chinesedragon/blog/317307

主要函数是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版本来检测

; 获取本机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
另外附上一个小工具,用来检测本机.Net Framework版本情况(http://www.asoft.be/prod_netver.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  nsis .net framework