Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 643|回复: 0

解决c#,wpf程序带环境安装包体积太大问题

[复制链接]
  • TA的每日心情
    奋斗
    2024-4-6 11:05
  • 签到天数: 748 天

    [LV.9]以坛为家II

    2034

    主题

    2092

    帖子

    70万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    705612
    发表于 2021-5-24 12:41:04 | 显示全部楼层 |阅读模式

    在.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.0.30319.1 = .NET 4.0 RTM
    • 4.0.30319.269 = .NET 4.0 on Windows XP SP3, 7, 7 SP1 
    • 4.0.30319.276 = .NET 4.0 on Windows XP SP3 (4.0.3 Runtime update)
    • 4.0.30319.296 = .NET 4.0 on Windows XP SP3, 7 
    • 4.0.30319.544 = .NET 4.0 on Windows XP SP3, 7, 7 SP1 
    • 4.0.30319.1008 = .NET 4.0 on Windows XP SP3, 7, 7 SP1 (with MS13-052 GDR security update)
    • 4.0.30319.1022 = .NET 4.0 on Windows XP SP3, 7, 7 SP1 (with MS14-009 GDR security update)
    • 4.0.30319.1026 = .NET 4.0 on Windows XP SP3, 7, 7 SP1 (with MS14-057 GDR security update)
    • 4.0.30319.2034 = .NET 4.0 on Windows XP SP3, 7, 7 SP1 (with MS14-009 LDR security update)

    4.5

    • 4.0.30319.17626 = .NET 4.5 RC
    • 4.0.30319.17929 = .NET 4.5 RTM
    • 4.0.30319.18010 = .NET 4.5 on Windows 8
    • 4.0.30319.18052 = .NET 4.5 on Windows 7 SP1 64-bit
    • 4.0.30319.18063 = .NET 4.5 on Windows 7 SP1 64-bit (with MS14-009 security update)

    4.5.1

    • 4.0.30319.18408 = .NET 4.5.1 on Windows 7 SP1 64-bit
    • 4.0.30319.18444 = .NET 4.5.1 on Windows 7 SP1 64-bit (with MS14-009 security update)
    • 4.0.30319.34014 = .NET 4.5.1 on Windows 8.1 64-bit

    4.5.2

    • 4.0.30319.34209 = .NET 4.5.2 on Windows 7 SP1 64-bit
    • 4.0.30319.34209 = .NET 4.5.2 on Windows 8.1 64-bit

    4.6

    • 4.0.30319.42000 = .NET 4.6 on Windows 8.1 64-bit

     

     

     

     

     PSS:最后,感叹一下,离开大公司进入创业公司之后,面对的问题越来越多,解决问题的能力得到了质的飞跃,每一个项目都是公司的命脉,每个人的身上都肩负着重要的责任,不再是大公司的螺丝钉,而是建设的参与者,方向的影响者。

    如有疑问欢迎提问,大家共同进步!

     

    最后,创业公司招人,前端,PHP,c#,公司地址:广州,有意者欢迎留言私聊。

     

     

    个人主页:WWW.bobdong.cn

     

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-5-18 16:36 , Processed in 0.063057 second(s), 29 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表