NSIS:检测本机.Net Framework版本
2016-07-03 11:50
603 查看
为了实现检测本机.Net Framework版本并在线下载安装,我找到了这篇文章
http://my.oschina.net/chinesedragon/blog/317307
主要函数是GetNetFrameworkVersion。作用是获取本机.Net Framework最高版本号。
但是它忽略了.Net CLR版本的问题。先来看张图
![](http://i.msdn.microsoft.com/Bb822049.FWVersions(zh-cn,VS.100).png)
图中显示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版本来检测
http://my.oschina.net/chinesedragon/blog/317307
主要函数是GetNetFrameworkVersion。作用是获取本机.Net Framework最高版本号。
但是它忽略了.Net CLR版本的问题。先来看张图
![](http://i.msdn.microsoft.com/Bb822049.FWVersions(zh-cn,VS.100).png)
图中显示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)
相关文章推荐
- IIS7/7.5 appcmd命令摘记
- Win7下,微软.net Framework开发环境
- 在vs2010下使用C#连接Oracle数据库
- 黑马程序员—转义符和类型转换
- 黑马程序员—if-else与异常
- 如何判断所安装的.NET Framework Version?
- nsis安装脚本
- NSIS制作安装文件
- c#初步
- 对ASP.NET页面生命周期总结(1)
- C#从头开始第一篇之C#与.Net框架
- NSIS脚本定制安装程序包
- 用C#获取进程信息
- 服务器中C#的程序启动时出错,提示“配置系统未能初始化”
- 服务器中C#的程序启动时出错,提示“配置系统未能初始化”
- 用C#获取进程信息
- 黑马程序员-----踏踏实实基础C#基础(三)
- 黑马程序员------踏踏实实基础C#基础(一)
- AppSettings和ConnectionStrings的区别