在.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

解决c#,wpf程序带环境安装包体积太大问题的更多相关文章

  1. 通过pip命令导出和导入Python环境安装包

    我们在开发完代码后,一般需要将依赖包导出,然后在移植到其他系统使去安装,保证环境正常   导出Python环境安装包[root@bogon ~]# pip freeze > packages.t ...

  2. LANMPS 一键PHP环境安装包(转)

    转:http://www.lanmps.com/ LANMPS 一键安装包,php绿色环境套件包: https://github.com/foxiswho/lanmps 安装 Mar 17, 2017 ...

  3. linux环境安装包方式

    概述 安装有很多种,有时我们会混淆视听不知在什么场景或什么情况下用什么命令,下面讲解下几种安装命令的使用.希望对大家有帮助~ 详解 pip install kuming或 python -m pip ...

  4. WPF导出发布安装包,无法验证发行者解决办法

    右击工程项目点发布->完成 此时在工程目录下生成了安装文件setup.exe 同时又在工程下生成了临时证书WpfApp1_TemporaryKey.pfx 如果此时强行安装会弹出如下警告 接下来 ...

  5. apache+php+mysql常见集成环境安装包

    http://www.thinksaas.cn/group/topic/33/ apache+php+mysql是常见php环境,在windows下也称为WAMP,对于初学者自选版本搭建总是会遇到一些 ...

  6. centos7 下解决mysql-server找不到安装包问题

    第一步:安装从网上下载文件的wget命令 [root@master ~]# yum -y install wget 第二步:下载mysql的repo源 [root@master ~]# wget ht ...

  7. 试验笔记 - 使用7-ZIP压缩来减小APK安装包体积

    7-ZIP版本:9.20 x86 And x64 Windows(2010-11-18) 1. 将APK包解压到文件夹2. 全选所有文件,右键“添加到压缩包”3.“压缩格式”必须“zip”4.“压缩等 ...

  8. 修改visual studio setup 安装顺序(解决新版安装包无法自动移除老版本程序的问题)

    背景 visual studio setup 支持自动删除之前版本的安装,需要设置RemovePreviousVersions = true, DetectNewerInstalledVersion ...

  9. pip安装包失败的常见解决方法

    pip安装包失败的常见解决方法 方法一 当安装包失效的时候可以去网站下载whl文件.下载的时候应该先查看电脑上 python 的版本. 地址:https://www.lfd.uci.edu/~gohl ...

随机推荐

  1. error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏的解决方案

    首先,卸载相关的软件,然后删除所有和virtual studio相关的目录 然后如果还出现该问题,则: Mark一下,解决方法:将嵌入清单设置为"否" 发生场合:在用 C++写一个 ...

  2. Sql CLR

    using System;using System.Data;using System.Data.SqlClient;using System.Data.SqlTypes;using Microsof ...

  3. C#学习笔记(十一):动态类型

    C#是一门静态类型的语言,但是在C#4.0时微软引入了动态类型的概念. dynamic 关键字dynamic用来定义动态对象,我们来看一下动态类型的一些特性. 调用不同类的相同方法 我们有两个或多个不 ...

  4. [置顶] 文件和目录(二)--unix环境高级编程读书笔记

    在linux中,文件的相关信息都记录在stat这个结构体中,文件长度是记录在stat的st_size成员中.对于普通文件,其长度可以为0,目录的长度一般为1024的倍数,这与linux文件系统中blo ...

  5. windbg命令分类与概述

    WinDBG的大多数功能是以命令方式工作的, 本系列将介绍WinDBG的三类命令, 标准命令, 元命令和扩展命令. =============== 标准命令 =============== 标准命令用 ...

  6. 常见MFC UI界面库

    Xtrme toolkit,BCGControlBar,SkinMagic,AppFace,Skin++,Uskin++,SYGUI,LibUIDK,GuiToolkit,GardenUI等等,除了后 ...

  7. 有关java中static关键的重写问题

    <Java编程思想>中这样提到“只有普通的方法调用可以是多态的”.说白了,就是静态方法不能实现重写这种多态. JAVA静态方法形式上可以重写(只要子类不加@Override关键字修饰的话, ...

  8. 寻ta分析与站点内容

    从 寻ta 突然来的訪问量就開始在想.站点内容是否才是真正须要的东西. 寻ta分析 作为一篇文章带来的影响,我们能够看看訪问会话. 日期 訪问量 5.5 9 5.6 4618 5.7 1216 5.8 ...

  9. 网络编程中常见地址结构与转换(IPv4/IPv6)

    1. sockaddr/sockaddr_in/in_addr (IPv4).sockaddr6_in/in6_addr/addrinfo (IPv6) struct sockaddr { unsig ...

  10. Codeforces Gym 100513G G. FacePalm Accounting 暴力

    G. FacePalm Accounting Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100513 ...