dotnet 获取用户设备安装了哪些 .NET Framework 框架
从注册表可以拿到当前用户安装的 .NET Framework 版本,本文告诉大家如何解析这些信息
在注册表的当前设备的 SOFTWARE\Microsoft\NET Framework Setup\NDP\
可以拿到在设备安装的 .NET Framework 版本
大概从注册表拿到的数据就是这样
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
public class UserNetFramework
{
/// <summary>
/// .NET Framework 2.0 SP2
/// </summary>
public bool InstalledNETFramework20SP2 => _list.Contains(NETFramework20SP2);
private const string NETFramework20SP2 = ".NET Framework 2.0 SP2";
/// <summary>
/// .NET Framework 3.0 SP2
/// </summary>
public bool InstalledNETFramework30SP2 => _list.Contains(NETFramework30SP2);
private const string NETFramework30SP2 = ".NET Framework 3.0 SP2";
/// <summary>
/// .NET Framework 3.5 SP1
/// </summary>
public bool InstalledNETFramework35SP1 => _list.Contains(NETFramework35SP1);
private const string NETFramework35SP1 = ".NET Framework 3.5 SP1";
/// <summary>
/// .NET Framework 4 Client Profile
/// </summary>
public bool InstalledNETFramework4CP => _list.Contains(NETFramework4CP);
private const string NETFramework4CP = ".NET Framework 4 Client Profile";
/// <summary>
/// .NET Framework 4 Full
/// </summary>
public bool InstalledNETFramework4F => _list.Contains(NETFramework4F);
private const string NETFramework4F = ".NET Framework 4 Full";
/// <summary>
/// .NET Framework 4.5 Client Profile
/// </summary>
public bool InstalledNETFramework45CP => _list.Contains(NETFramework45CP);
private const string NETFramework45CP = ".NET Framework 4.5 Client Profile";
/// <summary>
/// .NET Framework 4.5
/// </summary>
public bool InstalledNETFramework45 => _list.Contains(NETFramework45);
private const string NETFramework45 = ".NET Framework 4.5";
/// <summary>
/// .NET Framework 4.5.1
/// </summary>
public bool InstalledNETFramework451 => _list.Contains(NETFramework451);
private const string NETFramework451 = ".NET Framework 4.5.1";
/// <summary>
/// .NET Framework 4.5.2
/// </summary>
public bool InstalledNETFramework452 => _list.Contains(NETFramework452);
private const string NETFramework452 = ".NET Framework 4.5.2";
/// <summary>
/// .NET Framework 4.6
/// </summary>
public bool InstalledNETFramework46 => _list.Contains(NETFramework46);
private const string NETFramework46 = ".NET Framework 4.6";
/// <summary>
/// .NET Framework 4.6.1
/// </summary>
public bool InstalledNETFramework461 => _list.Contains(NETFramework461);
private const string NETFramework461 = ".NET Framework 4.6.1";
/// <summary>
/// .NET Framework 4.7 Client Profile
/// </summary>
public bool InstalledNETFramework47CP => _list.Contains(NETFramework47CP);
private const string NETFramework47CP = ".NET Framework 4.7 Client Profile";
/// <summary>
/// .NET Framework 4.7
/// </summary>
public bool InstalledNETFramework47 => _list.Contains(NETFramework47);
private const string NETFramework47 = ".NET Framework 4.7";
private readonly HashSet<string> _list = new HashSet<string>();
public static UserNetFramework Parser(string str)
{
var userNetFramework = new UserNetFramework();
foreach (var temp in new[]
{
NETFramework47CP,
NETFramework47,
NETFramework461,
NETFramework46,
NETFramework452,
NETFramework451,
NETFramework45CP,
NETFramework45,
NETFramework4CP,
NETFramework4F,
NETFramework35SP1,
NETFramework30SP2,
NETFramework20SP2,
})
{
if (str.Contains(temp))
{
str = str.Replace(temp, "");
userNetFramework._list.Add(temp);
}
}
return userNetFramework;
}
}
.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 框架的更多相关文章
- django的rest framework框架——安装及基本使用
一.django的FBV 和 CBV 1.FBV(基于函数的视图): urlpatterns = [ url(r'^users/', views.users), ] def users(request ...
- asp dotnet core 从 Frp 获取用户真实 IP 地址
我在本地开一个服务,然后通过 Frp 让小伙伴可以在外网访问我的 API 连接,但是直接通过 RemoteIp 拿到的是本地的地址.本文告诉小伙伴如何通过 Frp 可以拿到用户的真实 IP 地址 我写 ...
- 用c#开发微信(2)扫描二维码,用户授权后获取用户基本信息 (源码下载)
本文将介绍基于Senparc.Weixin微信开发框架来实现网页授权来获取用户基本信息.先生成包含授权及回调url信息的二维码:用户用微信扫描之后,被要求授权以获取Ta的用户基本信息:用户授权后,通过 ...
- 【转】【Android应用开发详解】第01期:第三方授权认证(一)实现第三方授权登录、分享以及获取用户资料
转载请注明出处:http://blog.csdn.net/yangyu20121224/article/details/9057257 由于公司项目的需要,要实现在项目中使用第三方授权登录以及分享文字 ...
- iOS获取用户设备崩溃日志并分析
项目最近发布,部分用户在内侧使用,正好遇到一些问题,由于用户在其他城市,所以对于用户设备产生的崩溃日志,不好直接拿设备连接电脑. 对于这种情况,我们可以这样: 1.引导用户开启iOS设备设置-> ...
- 【Android应用开发详解】实现第三方授权登录、分享以及获取用户资料
由于公司项目的需要,要实现在项目中使用第三方授权登录以及分享文字和图片等这样的效果,几经波折,查阅了一番资料,做了一个Demo.实现起来的效果还是不错的,不敢独享,决定写一个总结的教程,供大家互相 ...
- 使用ShareSDK实现第三方授权登录、分享以及获取用户资料效果,项目中包含:源码+效果图+项目结构图
[Android应用开发详解]第01期:第三方授权认证(一)实现第三方授权登录.分享以及获取用户资料 由于公司项目的需要,要实现在项目中使用第三方授权登录以及分享文字和图片等这样的效果,几经波折, ...
- .Net之微信小程序获取用户UnionID
前言: 在实际项目开发中我们经常会遇到账号统一的问题,如何在不同端或者是不同的登录方式下保证同一个会员或者用户账号唯一(便于用户信息的管理).这段时间就有一个这样的需求,之前有个客户做了一个微信小程序 ...
- 【微信小程序】获取用户地理位置权限,二次请求授权,逆解析获取地址
摘要:微信小程序内获取用户地理位置信息授权,被拒绝后二次获取,获取权限后逆解析得到用户所在省市区等.. 场景:商城类小程序,在首页时需展示附近门店,即用户刚进入小程序时就需要获取到用户位置信息 ste ...
随机推荐
- firefox扩展开发(二):用XUL创建窗口控件
firefox扩展开发(二):用XUL创建窗口控件 2008-06-11 16:57 1.创建一个简单的窗口 <?xml version="1.0"?> <?xm ...
- hdu 3536【并查集】
hdu 3536 题意: 有N个珠子,第i个珠子初始放在第i个城市.有两种操作: T A B:把A珠子所在城市的所有珠子放到B城市. Q A:输出A珠子所在城市编号,该城市有多少个珠子,该珠子转移了 ...
- 条件变量用例--解锁与signal的顺序问题
我们知道,当调用signal/broadcast唤醒等待条件变量的其他线程时,既可以在加锁的情况下调用signal/broadcast,也可以在解锁的情况下调用. 那么,到底哪种情况更好呢?man手册 ...
- Spark in action on Kubernetes - 存储篇(一)
前言 在上篇文章中,我们分析了Spark Operator内部的机制,今天我们会讨论一个在大数据领域中最重要的话题 - 存储.大数据已经无声无息的融入了每个人的生活中.大到旅游买房,小到外卖打车,都可 ...
- 【Leetcode链表】回文链表(234)
题目 请判断一个链表是否为回文链表. 示例 1: 输入: 1->2 输出: false 示例 2: 输入: 1->2->2->1 输出: true 进阶: 你能否用 O(n) ...
- SDUT-2772_数据结构实验之串一:KMP简单应用
数据结构实验之串一:KMP简单应用 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 给定两个字符串string1和str ...
- Flask——向博客文章中添加图片
未添加图片样式 添加图片设置: 1.允许渲染img标签 在数据库文章模型allowed_tags中添加img 2.给clean函数加个参数attributes=attrs, attrs = { '*' ...
- Python深入:Distutils安装包
一:简介 尽管Python标准库已经支持很多的功能,但是有时还是会需要以第三方模块的形式添加新的功能到Python中. 在最简单的场景中,是你要安装的模块,已经有了针对你的平台的安装版本,因此只需要像 ...
- Project Euler Problem 24-Lexicographic permutations
全排列的生成,c++的next_permutation是O(n)生成全排列的.具体的O(n)生成全排列的算法,在 布鲁迪 的那本组合数学中有讲解(课本之外,我就看过这一本组合数学),冯速老师翻译的,具 ...
- Hive高阶聚合函数 GROUPING SETS、Cube、Rollup
-- GROUPING SETS作为GROUP BY的子句,允许开发人员在GROUP BY语句后面指定多个统计选项,可以简单理解为多条group by语句通过union all把查询结果聚合起来结合起 ...