从注册表可以拿到当前用户安装的 .NET Framework 版本,本文告诉大家如何解析这些信息



在注册表的当前设备的 SOFTWARE\Microsoft\NET Framework Setup\NDP\ 可以拿到在设备安装的 .NET Framework 版本

大概从注册表拿到的数据就是这样

  1. v2.0.50727=.NET Framework 2.0 SP2; v3.0=.NET Framework 3.0 SP2; v3.5=.NET Framework 3.5 SP1; v4 Client=.NET Framework 4.5 Client Profile; v4 Full=.NET Framework 4.5;

本文主要告诉大家如何从上面的字符串解析出用户安装了哪些 .NET Framework 版本

各个版本的 .NET Framework 依赖的系统请看.NET Framework Versions and Dependencies

  1. public class UserNetFramework
  2. {
  3. /// <summary>
  4. /// .NET Framework 2.0 SP2
  5. /// </summary>
  6. public bool InstalledNETFramework20SP2 => _list.Contains(NETFramework20SP2);
  7. private const string NETFramework20SP2 = ".NET Framework 2.0 SP2";
  8. /// <summary>
  9. /// .NET Framework 3.0 SP2
  10. /// </summary>
  11. public bool InstalledNETFramework30SP2 => _list.Contains(NETFramework30SP2);
  12. private const string NETFramework30SP2 = ".NET Framework 3.0 SP2";
  13. /// <summary>
  14. /// .NET Framework 3.5 SP1
  15. /// </summary>
  16. public bool InstalledNETFramework35SP1 => _list.Contains(NETFramework35SP1);
  17. private const string NETFramework35SP1 = ".NET Framework 3.5 SP1";
  18. /// <summary>
  19. /// .NET Framework 4 Client Profile
  20. /// </summary>
  21. public bool InstalledNETFramework4CP => _list.Contains(NETFramework4CP);
  22. private const string NETFramework4CP = ".NET Framework 4 Client Profile";
  23. /// <summary>
  24. /// .NET Framework 4 Full
  25. /// </summary>
  26. public bool InstalledNETFramework4F => _list.Contains(NETFramework4F);
  27. private const string NETFramework4F = ".NET Framework 4 Full";
  28. /// <summary>
  29. /// .NET Framework 4.5 Client Profile
  30. /// </summary>
  31. public bool InstalledNETFramework45CP => _list.Contains(NETFramework45CP);
  32. private const string NETFramework45CP = ".NET Framework 4.5 Client Profile";
  33. /// <summary>
  34. /// .NET Framework 4.5
  35. /// </summary>
  36. public bool InstalledNETFramework45 => _list.Contains(NETFramework45);
  37. private const string NETFramework45 = ".NET Framework 4.5";
  38. /// <summary>
  39. /// .NET Framework 4.5.1
  40. /// </summary>
  41. public bool InstalledNETFramework451 => _list.Contains(NETFramework451);
  42. private const string NETFramework451 = ".NET Framework 4.5.1";
  43. /// <summary>
  44. /// .NET Framework 4.5.2
  45. /// </summary>
  46. public bool InstalledNETFramework452 => _list.Contains(NETFramework452);
  47. private const string NETFramework452 = ".NET Framework 4.5.2";
  48. /// <summary>
  49. /// .NET Framework 4.6
  50. /// </summary>
  51. public bool InstalledNETFramework46 => _list.Contains(NETFramework46);
  52. private const string NETFramework46 = ".NET Framework 4.6";
  53. /// <summary>
  54. /// .NET Framework 4.6.1
  55. /// </summary>
  56. public bool InstalledNETFramework461 => _list.Contains(NETFramework461);
  57. private const string NETFramework461 = ".NET Framework 4.6.1";
  58. /// <summary>
  59. /// .NET Framework 4.7 Client Profile
  60. /// </summary>
  61. public bool InstalledNETFramework47CP => _list.Contains(NETFramework47CP);
  62. private const string NETFramework47CP = ".NET Framework 4.7 Client Profile";
  63. /// <summary>
  64. /// .NET Framework 4.7
  65. /// </summary>
  66. public bool InstalledNETFramework47 => _list.Contains(NETFramework47);
  67. private const string NETFramework47 = ".NET Framework 4.7";
  68. private readonly HashSet<string> _list = new HashSet<string>();
  69. public static UserNetFramework Parser(string str)
  70. {
  71. var userNetFramework = new UserNetFramework();
  72. foreach (var temp in new[]
  73. {
  74. NETFramework47CP,
  75. NETFramework47,
  76. NETFramework461,
  77. NETFramework46,
  78. NETFramework452,
  79. NETFramework451,
  80. NETFramework45CP,
  81. NETFramework45,
  82. NETFramework4CP,
  83. NETFramework4F,
  84. NETFramework35SP1,
  85. NETFramework30SP2,
  86. NETFramework20SP2,
  87. })
  88. {
  89. if (str.Contains(temp))
  90. {
  91. str = str.Replace(temp, "");
  92. userNetFramework._list.Add(temp);
  93. }
  94. }
  95. return userNetFramework;
  96. }
  97. }

.NET Framework Versions and Dependencies

.NET Framework 4.x 程序到底运行在哪个 CLR 版本之上 - walterlv

我搭建了自己的博客 https://blog.lindexi.com/ 欢迎大家访问,里面有很多新的博客。只有在我看到博客写成熟之后才会放在csdn或博客园,但是一旦发布了就不再更新

如果在博客看到有任何不懂的,欢迎交流,我搭建了 dotnet 职业技术学院 欢迎大家加入


本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接:http://blog.csdn.net/lindexi_gd ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系

dotnet 获取用户设备安装了哪些 .NET Framework 框架的更多相关文章

  1. django的rest framework框架——安装及基本使用

    一.django的FBV 和 CBV 1.FBV(基于函数的视图): urlpatterns = [ url(r'^users/', views.users), ] def users(request ...

  2. asp dotnet core 从 Frp 获取用户真实 IP 地址

    我在本地开一个服务,然后通过 Frp 让小伙伴可以在外网访问我的 API 连接,但是直接通过 RemoteIp 拿到的是本地的地址.本文告诉小伙伴如何通过 Frp 可以拿到用户的真实 IP 地址 我写 ...

  3. 用c#开发微信(2)扫描二维码,用户授权后获取用户基本信息 (源码下载)

    本文将介绍基于Senparc.Weixin微信开发框架来实现网页授权来获取用户基本信息.先生成包含授权及回调url信息的二维码:用户用微信扫描之后,被要求授权以获取Ta的用户基本信息:用户授权后,通过 ...

  4. 【转】【Android应用开发详解】第01期:第三方授权认证(一)实现第三方授权登录、分享以及获取用户资料

    转载请注明出处:http://blog.csdn.net/yangyu20121224/article/details/9057257 由于公司项目的需要,要实现在项目中使用第三方授权登录以及分享文字 ...

  5. iOS获取用户设备崩溃日志并分析

    项目最近发布,部分用户在内侧使用,正好遇到一些问题,由于用户在其他城市,所以对于用户设备产生的崩溃日志,不好直接拿设备连接电脑. 对于这种情况,我们可以这样: 1.引导用户开启iOS设备设置-> ...

  6. 【Android应用开发详解】实现第三方授权登录、分享以及获取用户资料

      由于公司项目的需要,要实现在项目中使用第三方授权登录以及分享文字和图片等这样的效果,几经波折,查阅了一番资料,做了一个Demo.实现起来的效果还是不错的,不敢独享,决定写一个总结的教程,供大家互相 ...

  7. 使用ShareSDK实现第三方授权登录、分享以及获取用户资料效果,项目中包含:源码+效果图+项目结构图

    [Android应用开发详解]第01期:第三方授权认证(一)实现第三方授权登录.分享以及获取用户资料   由于公司项目的需要,要实现在项目中使用第三方授权登录以及分享文字和图片等这样的效果,几经波折, ...

  8. .Net之微信小程序获取用户UnionID

    前言: 在实际项目开发中我们经常会遇到账号统一的问题,如何在不同端或者是不同的登录方式下保证同一个会员或者用户账号唯一(便于用户信息的管理).这段时间就有一个这样的需求,之前有个客户做了一个微信小程序 ...

  9. 【微信小程序】获取用户地理位置权限,二次请求授权,逆解析获取地址

    摘要:微信小程序内获取用户地理位置信息授权,被拒绝后二次获取,获取权限后逆解析得到用户所在省市区等.. 场景:商城类小程序,在首页时需展示附近门店,即用户刚进入小程序时就需要获取到用户位置信息 ste ...

随机推荐

  1. python已安装包的查看方法和requirements.text的使用

     1.已经安装包的查看方法 命令pip freeze 2. 批量导出命令 pip freeze >requirements.txt 3. 批量导入命令 pip install -r requir ...

  2. OpenTelemetry-可观察性的新时代

    有幸在2019KubeCon上海站听到Steve Flanders关于OpenTelemetry的演讲,之前Ops领域两个网红项目OpenTracing和OpenCensus终于走到了一起,可观察性统 ...

  3. android GUI 流程记录

    ViewRootImpl 与 wms ViewRootImple里的 WindowSeesion是WindowManagerService的proxy, 通过这个句柄来调用WMS的功能而W是 wms用 ...

  4. firefox扩展开发(二):用XUL创建窗口控件

    firefox扩展开发(二):用XUL创建窗口控件 2008-06-11 16:57 1.创建一个简单的窗口 <?xml version="1.0"?> <?xm ...

  5. JavaScript--DOM操作例子:隔行变色

    上效果: 实现思想: 主要是js动态创建标签,还有动态结合css实现样式 <!DOCTYPE html> <html lang="en"> <head ...

  6. MUI - myStorage在ios safari无痕浏览模式下的解决方案

    myStorage在ios safari无痕浏览模式下的解决方案 今天看到了这个帖子LocalStorage 在 Private Browsing 下的一个限制, 吓尿了,如果用户开启了无痕浏览,ap ...

  7. 2019.8.3 [HZOI]NOIP模拟测试12 C. 分组

    2019.8.3 [HZOI]NOIP模拟测试12 C. 分组 全场比赛题解:https://pan.baidu.com/s/1eSAMuXk 刚看这题觉得很难,于是数据点分治 k只有1和2两种,分别 ...

  8. python 文件读写编码

  9. 《C程序设计语言》笔记(一)

    一:导言 1:printf中的格式化字符串: %ld                    按照long整型打印 %6d                   按照十进制整数打印,至少6个字符宽,不够的 ...

  10. 【LeetCode】90.Subsets II

    Subsets II Given a collection of integers that might contain duplicates, nums, return all possible s ...