代码如下:

public static bool checkFrameWork(string destVersion)
{
bool ver1 = GetVersionFromRegistry(destVersion);
if (ver1)
return true;
else
{
return Get45PlusFromRegistry();
}
}
//reference:https://docs.microsoft.com/en-us/dotnet/framework/migration-guide/how-to-determine-which-versions-are-installed
public static bool Get45PlusFromRegistry()
{
const string subkey = @"SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full\"; using (RegistryKey ndpKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32).OpenSubKey(subkey))
{
if (ndpKey != null && ndpKey.GetValue("Release") != null)
{
return CheckFor45PlusVersion((int)ndpKey.GetValue("Release"));
}
return false;
}
} // Checking the version using >= will enable forward compatibility.
public static bool CheckFor45PlusVersion(int releaseKey)
{
if (releaseKey >= 378389)
return true;
// This code should never execute. A non-null release key should mean
// that 4.5 or later is installed.
return false;
}
public static bool GetVersionFromRegistry(string destVersion)
{
ArrayList versions = new ArrayList();
// Opens the registry key for the .NET Framework entry.
using (RegistryKey ndpKey =
RegistryKey.OpenRemoteBaseKey(RegistryHive.LocalMachine, "").
OpenSubKey(@"SOFTWARE\Microsoft\NET Framework Setup\NDP\"))
{
// As an alternative, if you know the computers you will query are running .NET Framework 4.5
// or later, you can use:
// using (RegistryKey ndpKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine,
// RegistryView.Registry32).OpenSubKey(@"SOFTWARE\Microsoft\NET Framework Setup\NDP\"))
foreach (string versionKeyName in ndpKey.GetSubKeyNames())
{
if (versionKeyName.StartsWith("v"))
{
RegistryKey versionKey = ndpKey.OpenSubKey(versionKeyName);
string name = (string)versionKey.GetValue("Version", "");
string sp = versionKey.GetValue("SP", "").ToString();
string install = versionKey.GetValue("Install", "").ToString();
if (install == "") //no install info, must be later.
{
Console.WriteLine(name);
versions.Add(name);
}
//Console.WriteLine(versionKeyName + " " + name);
else
{
if (sp != "" && install == "1")
{
//Console.WriteLine(versionKeyName + " " + name + " SP" + sp);
Console.WriteLine(name);
versions.Add(name);
} }
if (name != "")
{
continue;
}
foreach (string subKeyName in versionKey.GetSubKeyNames())
{
RegistryKey subKey = versionKey.OpenSubKey(subKeyName);
name = (string)subKey.GetValue("Version", "");
if (name != "")
sp = subKey.GetValue("SP", "").ToString();
install = subKey.GetValue("Install", "").ToString();
if (install == "") //no install info, must be later.
{
//Console.WriteLine(versionKeyName + " " + name);
//Console.WriteLine(name);
versions.Add(name);
}
else
{
if (sp != "" && install == "1")
{
//Console.WriteLine(" " + subKeyName + " " + name + " SP" + sp);
//Console.Write(name);
versions.Add(name);
}
else if (install == "1")
{
//Console.WriteLine(" " + subKeyName + " " + name);
//Console.WriteLine(name);
versions.Add(name);
}
}
}
}
}
object[] verArr = versions.ToArray();
foreach (object o in verArr)
{
Version ver;
string str = o.ToString();
if (str == "")
ver = new Version("1.0");
else
ver = new Version(str);
if (ver >= new Version(destVersion))
return true;
}
}
return false;
}

其中还有一点小瑕疵,有兴趣的自己看一看修改一下就好了。
在使用的时候,我们只需要调用checkFrameWork函数就可以了。

使用C#检验.NET FrameWork版本的更多相关文章

  1. .NET FRAMEWORK版本:4.0.30319; ASP.NET版本:4.6.118.0

    https://gqqnbig.me/2015/11/23/net-framework%e7%89%88%e6%9c%ac4-0-30319-asp-net%e7%89%88%e6%9c%ac4-6- ...

  2. c# 获取系统版本,获取net framework 版本(Environment 类)

    1.获取当前操作系统版本信息 使用Environment.OSVersion 属性 获取包含当前平台标识符和版本号的 OperatingSystem 对象. 命名空间:  System程序集:  ms ...

  3. vs版本与.net framework 版本对应

    vs2002  .net framework 1.0 vs2003 版本号:7.x  .net framework 1.1   window server 2003 vs2005 版本号:8.x  . ...

  4. 查看.Net Framework版本的方法

    乐博网最新补充(乐博网一步步教你如何最快查看本机.net framework的版本): 方法一: 第一步: 打开“我的电脑“,在地址栏输入  %systemroot%\Microsoft.NET\Fr ...

  5. Windows查看电脑上安装的.Net Framework版本的五种方法(转)

    1.查看安装文件判断Framwork版本号 打开资源管理器,比如我的电脑,再地址栏输入%systemroot%\Microsoft.NET\Framework后单击“转到”或者按回车. 在新文件夹中查 ...

  6. NET Framework 版本和依赖关系

    原文:https://docs.microsoft.com/zh-cn/dotnet/framework/migration-guide/versions-and-dependencies 每个版本的 ...

  7. 查看Windows电脑上.NET Framework版本的方法(找了好久的方法)

    照网上大多数人的方法,在路径 C:\Windows\Microsoft.NET\Framework 下可以查看到.NET Framework的版本,不过无论Win7还是Win10,显示都是这样的: 那 ...

  8. Visual Studio 2015 没显示可用的.Net Framework版本

    安装了VS 2015企业版, 然后在创建工程的时候遇到了一个问题: 当我选择Framework版本时候, 列表是空的, 如下图所示: 是生成工具出现了问题,所以尝试又安装了下 "Micros ...

  9. .NET Framework 版本和依赖关系[微软官方文档]

    .NET Framework 版本和依赖关系 微软官方文档: https://docs.microsoft.com/zh-cn/dotnet/framework/migration-guide/ver ...

随机推荐

  1. 微信小程序-tab标签栏实现教程

    一.摘要 tab栏(标签切换栏)是app中常见的一种交互方式,它可以承载更多的内容,同时又兼顾友好体验的优点.但在小程序中,官方并没有为咱们提供现成的组件.因此我们程序员展现才艺的时候到了(其实市面上 ...

  2. TCP连接管理(TCP Connection Management)

    在最近的求职面试过程中,关于"建立TCP连接的三次握手"不止一次被问到了,虽然我以前用同样的问题面试过别人,但感觉还是不能给面试官一个很清晰的回答.本文算是对整个TCP连接管理做一 ...

  3. Eclipse/MyEclipse 选择Android NDK目录时提示“Not a valid NDK directory”

    Eclipse或者MyEclipse 选择Android NDK目录时提示“Not a valid NDK directory” 在NDK目录中新建一个名称 ndk-build (没有扩展名)的空文件

  4. spring中增加自定义配置支持

    spring.schemas 在使用spring时,我们会首先编写spring的配置文件,在配置文件中,我们除了使用基本的命名空间http://www.springframework.org/sche ...

  5. [android] 天气app布局练习(四)

    主要练习一下获取网络数据和解析xml MainActivity.java package com.example.weatherreport; import java.io.UnsupportedEn ...

  6. MyBatis_注解式开发

    一.注解式开发 mybatis的注解主要替换映射文件. 二.基础语法 注解首字母大写,因为注解与类.接口是同一级别的(类同一层级的:类,接口,注解,枚举).一个注解,后台对应着一个@interface ...

  7. Synchronized的原理及自旋锁,偏向锁,轻量级锁,重量级锁的区别(摘抄和理解)

    1. 自旋锁的优缺点: 自旋锁 自旋锁原理非常简单,如果持有锁的线程能在很短时间内释放锁资源,那么那些等待竞争锁的线程就不需要做内核态和用户态之间的切换进入阻塞挂起状态,它们只需要等一等(自旋),等持 ...

  8. java.util.Collections.unmodifiableMap 示例

    1. 概述 public static <K,V> Map<K,V> unmodifiableMap(Map<? extends K,? extends V> m) ...

  9. Yii2.0 新建项目通用准备工作

    1.设置 cookieValidationKey 在 config/web.php 中 config 里有 components项中request有个cookieValidationKey需要配置参数 ...

  10. css 元素居中各种办法

    一:通过弹性布局<style> #container .box{ width: 80px; height: 80px; position: absolute; background:red ...