服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C# - C#如何判断.Net Framework版本是否满足软件运行需要的版本

C#如何判断.Net Framework版本是否满足软件运行需要的版本

2023-03-01 15:24智障侠 C#

这篇文章主要介绍了C#如何判断.Net Framework版本是否满足软件运行需要的版本问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

判断.Net Framework版本是否满足软件运行需要的版本

不直接运行软件,而是运行一个引导程序,在引导程序里面判断.Net Framework 的版本,满足条件就启动软件,不满足就提示用户安装.Net Framework

下面是如果确定用户的电脑是4.0及以上,才可以使用的新方法,否则只能使用老的方法,一样可以解决

各版本需要的 release 可以在微软官方文档中查到

https://docs.microsoft.com/zh-cn/dotnet/framework/migration-guide/how-to-determine-which-versions-are-installed#net_b

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/// <summary>
/// 判断.Net Framework的Release是否符合需要
/// (.Net Framework 版本在4.0及以上)
/// </summary>
/// <param name="release">需要的版本 version = 4.5 release = 379893</param>
/// <returns></returns>
private static bool GetDotNetRelease(int release)
{
    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 (int)ndpKey.GetValue("Release") >= release ? true : false;
        }
        return false;
    }
}

老的方法,支持2.0及以上

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
/// <summary>
/// 判断.Net Framework的Version是否符合需要
/// (.Net Framework 版本在2.0及以上)
/// </summary>
/// <param name="version">需要的版本 version = 4.5</param>
/// <returns></returns>
private static bool GetDotNetVersion(string version)
{
    string oldname = "0";
    using (RegistryKey ndpKey =
        RegistryKey.OpenRemoteBaseKey(RegistryHive.LocalMachine, "").
        OpenSubKey(@"SOFTWARE\Microsoft\NET Framework Setup\NDP\"))
    {
        foreach (string versionKeyName in ndpKey.GetSubKeyNames())
        {
            if (versionKeyName.StartsWith("v"))
            {
                RegistryKey versionKey = ndpKey.OpenSubKey(versionKeyName);
                string newname = (string)versionKey.GetValue("Version", "");
                if (string.Compare(newname, oldname) > 0)
                {
                    oldname = newname;
                }
                if (newname != "")
                {
                    continue;
                }
                foreach (string subKeyName in versionKey.GetSubKeyNames())
                {
                    RegistryKey subKey = versionKey.OpenSubKey(subKeyName);
                    newname = (string)subKey.GetValue("Version", "");
                    if (string.Compare(newname, oldname) > 0)
                    {
                        oldname = newname;
                    }
                }
            }
        }
    }
    return string.Compare(oldname, version) > 0 ? true : false;
}

最后将判断的代码放在Main方法里

?
1
2
3
4
5
6
7
8
9
10
11
12
13
static void Main(string[] args)
{
    if (!GetDotNetVersion("4.5"))
    {
        if (MessageBox.Show("当前缺少运行环境,是否进行安装!\r\n\r\n安装完成后将自动启动软件", "提示", MessageBoxButtons.YesNo) == DialogResult.No)
            return;
        Process.Start(@"_framework4.5.2.exe").WaitForExit(); //一直等待,直到Framework安装完成
        if (GetDotNetVersion("4.5"))
            Process.Start(@"你的程序.exe");
    }
    else
        Process.Start(@"你的程序.exe");
}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/sun_zeliang/article/details/81479775

延伸 · 阅读

精彩推荐
  • C#浅析C# 委托(Delegate)

    浅析C# 委托(Delegate)

    这篇文章主要介绍了C# 委托(Delegate)的相关资料,文中讲解非常详细,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下...

    菜鸟教程11772022-09-24
  • C#讲解C#面相对象编程中的类与对象的特性与概念

    讲解C#面相对象编程中的类与对象的特性与概念

    这篇文章主要介绍了C#面相对象编程中的类与对象的特性与概念,OOP面向对象语言相对C语言这样面相过程的语言来说具有类和对象以及方法这样的特性,需要...

    C#教程网10522021-11-09
  • C#C# http系列之以form-data方式上传多个文件及键值对集合到远程服务器

    C# http系列之以form-data方式上传多个文件及键值对集合到远程服务

    这篇文章主要介绍了C# http系列之以form-data方式上传多个文件及键值对集合到远程服务器,需要的朋友可以参考下...

    张传宁9392022-08-04
  • C#C#/VB.NET 实现彩色PDF转为灰度PDF

    C#/VB.NET 实现彩色PDF转为灰度PDF

    本文以C#代码为例介绍如何实现将彩色PDF文件转为灰度(黑白)的PDF文件,即将PDF文档里面的彩色图片或者文字等通过调用方法转为文档页面为灰色调、无...

    E-iceblue10432022-12-12
  • C#C# 输出字符串到文本文件中的实现代码

    C# 输出字符串到文本文件中的实现代码

    本文通过一个简单的代码给大家介绍C# 输出字符串到文本文件中,代码简单易懂,非常不错,具有一定的参考借鉴价值,需要的朋友参考下吧...

    大稳·杨10202022-02-24
  • C#C#递归算法之分而治之策略

    C#递归算法之分而治之策略

    分而治之的策略主要是将大量复杂的问题分成多个子问题,解决各个子问题,从而解决原问题,下面就让我们看看具体如何实现。...

    张玉彬11752021-11-25
  • C#关于C# 调用Dll 传递字符串指针参数的问题

    关于C# 调用Dll 传递字符串指针参数的问题

    这篇文章主要介绍了C# 调用Dll传递字符串指针参数,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可...

    许明吉博客8432022-12-16
  • C#C# CancellationToken和CancellationTokenSource的用法详解

    C# CancellationToken和CancellationTokenSource的用法详解

    做了.net core之后,发现CancellationToken用的越来越平凡了。这也难怪,原来.net framework使用异步的不是很多,而.net core首推异步编程,到处可以看到Task的影子...

    没有星星的夏季3942022-11-23