NSIS:检测本机.Net Framework版本

来源:互联网 发布:淘宝肖像权侵权 编辑:程序博客网 时间:2024/06/08 09:23

为了实现检测本机.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::LoadFunctionEnd; 获取本机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::LoadFunctionEnd
另外附上一个小工具,用来检测本机.Net Framework版本情况(http://www.asoft.be/prod_netver.html)

1 0