在.net开发客户端的时候,一定会遇到用户没有安装.net环境的问题,特别是现在win7,win8,win10多系统并用的时间段,很多开发者使用的是4.5的目标环境,用户却是使用win7的系统,这样势必会要安装环境包
可是如果win7的用户已经安装4.5的环境呢?那么用户是否需要连带着环境包一起下载呢?
我们前几天也遇见了这种困境,如果加上环境,安装包的体积太大,本身软件才几m,环境竟然高达70M,完全不合理嘛。
后来想到了一个折中的办法,
我们可以在项目中添加一个新的工程名为【PreLoad】,目标的环境选择win7最低的版本,framework 3.5
然后把主程序的入口设置成我们的PreLoad,在程序启动的时候PreLoad来判断用户的电脑安装的最高环境是否符合我们主程序的要求,如果符合,那么直接启动程序,如果不符合,我们在PreLoad中下载目标环境,自动安装。
这样,我们的程序体积就能大大减少。
至于为什么不用低版本的framework开发?
那是因为很多酷炫的功能只有高版本的才有,用户可挑剔了。一般客户端的得喜欢用c++,我水平不够顶多就要依赖framework开发wpf了
献上判断本机最高framework版本的代码
public static bool IsOverVersion() { using (RegistryKey ndpKey = RegistryKey.OpenRemoteBaseKey(RegistryHive.LocalMachine, "").OpenSubKey("SOFTWARE\\Microsoft\\NET Framework Setup\\NDP\\v4\\Full\\")) { int releaseKey = Convert.ToInt32(ndpKey.GetValue("Release")); return CheckVersion(releaseKey); } }
private static string CheckFor45DotVersion(int releaseKey) { if (releaseKey >= 394271) return "4.6.1 installed on all other Windows OS versions or later"; if (releaseKey >= 394254) return "4.6.1 installed on Windows 10 or later"; if (releaseKey >= 393297) return "4.6 installed on all other Windows OS versions or later"; if (releaseKey >= 393295) return "4.6 installed with Windows 10 or later"; if (releaseKey >= 379893) return "4.5.2 or later"; if (releaseKey >= 378758) return "4.5.1 installed on Windows 8, Windows 7 SP1, or Windows Vista SP2 or later"; if (releaseKey >= 378675) return "4.5.1 installed with Windows 8.1 or later"; if (releaseKey >= 378389) return "4.5 or later"; return "No 4.5 or later version detected"; }
PS:很多人喜欢使用 Environment.Version 来判断系统的版本号,可是经过测试,这样的拿到的数据只是软件本身目标框架的版本,并不是本机的最高版本号,最高的版本号还是要在注册表里面查看。
在代码中已经标明了个个版本在注册表中拿到的版本号码。
另外很多同学会问如果我就是需要知道目标框架呢?
那我这里还有一份表格,由Environment.Version 拿到的数据可以通过这个来判断版本
Base 4.0
4.5
4.5.1
4.5.2
4.6
PSS:最后,感叹一下,离开大公司进入创业公司之后,面对的问题越来越多,解决问题的能力得到了质的飞跃,每一个项目都是公司的命脉,每个人的身上都肩负着重要的责任,不再是大公司的螺丝钉,而是建设的参与者,方向的影响者。
如有疑问欢迎提问,大家共同进步!
最后,创业公司招人,前端,PHP,c#,公司地址:广州,有意者欢迎留言私聊。
个人主页:WWW.bobdong.cn
原文:http://www.cnblogs.com/Bobdong/p/5265837.html