当前位置:  开发笔记 > Android > 正文

如何检测安装的.NET Framework版本和Service Pack?

如何解决《如何检测安装的.NETFramework版本和ServicePack?》经验,为你挑选了8个好方法。

这里提出了类似的问题,但它是针对.NET 3.5的.具体来说,我正在寻找以下内容:

    确定安装哪些.NET Framework版本和Service Pack的正确方法是什么?

    是否有可以使用的注册表项列表?

    Framework版本之间是否存在任何依赖关系?

Scott Dorman.. 363

注册表是检测是否安装了特定版本的Framework 的官方方法.

在此输入图像描述

根据您要查找的Framework版本,需要更改哪些注册表项:

Framework Version  Registry Key
------------------------------------------------------------------------------------------
1.0                HKLM\Software\Microsoft\.NETFramework\Policy\v1.0\3705 
1.1                HKLM\Software\Microsoft\NET Framework Setup\NDP\v1.1.4322\Install 
2.0                HKLM\Software\Microsoft\NET Framework Setup\NDP\v2.0.50727\Install 
3.0                HKLM\Software\Microsoft\NET Framework Setup\NDP\v3.0\Setup\InstallSuccess 
3.5                HKLM\Software\Microsoft\NET Framework Setup\NDP\v3.5\Install 
4.0 Client Profile HKLM\Software\Microsoft\NET Framework Setup\NDP\v4\Client\Install
4.0 Full Profile   HKLM\Software\Microsoft\NET Framework Setup\NDP\v4\Full\Install

一般来说,您正在寻找:

"Install"=dword:00000001

除了.NET 1.0,其中值是字符串(REG_SZ)而不是数字(REG_DWORD).

确定Service Pack级别遵循类似的模式:

Framework Version  Registry Key
------------------------------------------------------------------------------------------
1.0                HKLM\Software\Microsoft\Active Setup\Installed Components\{78705f0d-e8db-4b2d-8193-982bdda15ecd}\Version 
1.0[1]             HKLM\Software\Microsoft\Active Setup\Installed Components\{FDC11A6F-17D1-48f9-9EA3-9051954BAA24}\Version 
1.1                HKLM\Software\Microsoft\NET Framework Setup\NDP\v1.1.4322\SP 
2.0                HKLM\Software\Microsoft\NET Framework Setup\NDP\v2.0.50727\SP 
3.0                HKLM\Software\Microsoft\NET Framework Setup\NDP\v3.0\SP 
3.5                HKLM\Software\Microsoft\NET Framework Setup\NDP\v3.5\SP 
4.0 Client Profile HKLM\Software\Microsoft\NET Framework Setup\NDP\v4\Client\Servicing
4.0 Full Profile   HKLM\Software\Microsoft\NET Framework Setup\NDP\v4\Full\Servicing

[1] Windows Media Center or Windows XP Tablet Edition

如您所见,如果您在Windows Media Center或Windows XP Tablet Edition上运行,则确定.NET 1.0的SP级别会发生更改.同样,.NET 1.0使用字符串值,而其他所有使用DWORD.

对于.NET 1.0,其中任何一个键的字符串值都具有#,#,####,#的格式.最后一个#是Service Pack级别.

虽然我没有明确要求这个,但如果你想知道框架的确切版本号,你可以使用这些注册表项:

Framework Version  Registry Key
------------------------------------------------------------------------------------------
1.0                HKLM\Software\Microsoft\Active Setup\Installed Components\{78705f0d-e8db-4b2d-8193-982bdda15ecd}\Version 
1.0[1]             HKLM\Software\Microsoft\Active Setup\Installed Components\{FDC11A6F-17D1-48f9-9EA3-9051954BAA24}\Version 
1.1                HKLM\Software\Microsoft\NET Framework Setup\NDP\v1.1.4322 
2.0[2]             HKLM\Software\Microsoft\NET Framework Setup\NDP\v2.0.50727\Version 
2.0[3]             HKLM\Software\Microsoft\NET Framework Setup\NDP\v2.0.50727\Increment
3.0                HKLM\Software\Microsoft\NET Framework Setup\NDP\v3.0\Version 
3.5                HKLM\Software\Microsoft\NET Framework Setup\NDP\v3.5\Version 
4.0 Client Profile HKLM\Software\Microsoft\NET Framework Setup\NDP\v4\Version 
4.0 Full Profile   HKLM\Software\Microsoft\NET Framework Setup\NDP\v4\Version 

[1] Windows Media Center or Windows XP Tablet Edition
[2] .NET 2.0 SP1
[3] .NET 2.0 Original Release (RTM)

同样,.NET 1.0使用字符串值,而其他所有使用DWORD.

补充说明

对于.NET 1.0,其中任何一个键的字符串值的格式为#,#,####,#.#,#,####字符串的一部分是Framework版本.

对于.NET 1.1,我们使用注册表项本身的名称,它代表版本号.

最后,如果你看一下依赖项,.NET 3.0会为.NET 2.0增加额外的功能,因此.NET 2.0和.NET 3.0都必须经过安装才能正确地说安装了.NET 3.0.同样,.NET 3.5为.NET 2.0和.NET 3.0添加了额外的功能,因此.NET 2.0,.NET 3.0和.NET 3.都应评估安装是否正确地说安装了.NET 3.5.

.NET 4.0安装了新版本的CLR(CLR版本4.0),它可以与CLR 2.0并行运行.

.NET 4.5的更新

v4.5如果安装了.NET 4.5,则注册表中不会有密钥.相反,您必须检查HKLM\Software\Microsoft\NET Framework Setup\NDP\v4\Full密钥是否包含一个名为的值Release.如果存在此值,则安装.NET 4.5,否则不安装.更多细节可以在这里和这里找到.



1> Scott Dorman..:

注册表是检测是否安装了特定版本的Framework 的官方方法.

在此输入图像描述

根据您要查找的Framework版本,需要更改哪些注册表项:

Framework Version  Registry Key
------------------------------------------------------------------------------------------
1.0                HKLM\Software\Microsoft\.NETFramework\Policy\v1.0\3705 
1.1                HKLM\Software\Microsoft\NET Framework Setup\NDP\v1.1.4322\Install 
2.0                HKLM\Software\Microsoft\NET Framework Setup\NDP\v2.0.50727\Install 
3.0                HKLM\Software\Microsoft\NET Framework Setup\NDP\v3.0\Setup\InstallSuccess 
3.5                HKLM\Software\Microsoft\NET Framework Setup\NDP\v3.5\Install 
4.0 Client Profile HKLM\Software\Microsoft\NET Framework Setup\NDP\v4\Client\Install
4.0 Full Profile   HKLM\Software\Microsoft\NET Framework Setup\NDP\v4\Full\Install

一般来说,您正在寻找:

"Install"=dword:00000001

除了.NET 1.0,其中值是字符串(REG_SZ)而不是数字(REG_DWORD).

确定Service Pack级别遵循类似的模式:

Framework Version  Registry Key
------------------------------------------------------------------------------------------
1.0                HKLM\Software\Microsoft\Active Setup\Installed Components\{78705f0d-e8db-4b2d-8193-982bdda15ecd}\Version 
1.0[1]             HKLM\Software\Microsoft\Active Setup\Installed Components\{FDC11A6F-17D1-48f9-9EA3-9051954BAA24}\Version 
1.1                HKLM\Software\Microsoft\NET Framework Setup\NDP\v1.1.4322\SP 
2.0                HKLM\Software\Microsoft\NET Framework Setup\NDP\v2.0.50727\SP 
3.0                HKLM\Software\Microsoft\NET Framework Setup\NDP\v3.0\SP 
3.5                HKLM\Software\Microsoft\NET Framework Setup\NDP\v3.5\SP 
4.0 Client Profile HKLM\Software\Microsoft\NET Framework Setup\NDP\v4\Client\Servicing
4.0 Full Profile   HKLM\Software\Microsoft\NET Framework Setup\NDP\v4\Full\Servicing

[1] Windows Media Center or Windows XP Tablet Edition

如您所见,如果您在Windows Media Center或Windows XP Tablet Edition上运行,则确定.NET 1.0的SP级别会发生更改.同样,.NET 1.0使用字符串值,而其他所有使用DWORD.

对于.NET 1.0,其中任何一个键的字符串值都具有#,#,####,#的格式.最后一个#是Service Pack级别.

虽然我没有明确要求这个,但如果你想知道框架的确切版本号,你可以使用这些注册表项:

Framework Version  Registry Key
------------------------------------------------------------------------------------------
1.0                HKLM\Software\Microsoft\Active Setup\Installed Components\{78705f0d-e8db-4b2d-8193-982bdda15ecd}\Version 
1.0[1]             HKLM\Software\Microsoft\Active Setup\Installed Components\{FDC11A6F-17D1-48f9-9EA3-9051954BAA24}\Version 
1.1                HKLM\Software\Microsoft\NET Framework Setup\NDP\v1.1.4322 
2.0[2]             HKLM\Software\Microsoft\NET Framework Setup\NDP\v2.0.50727\Version 
2.0[3]             HKLM\Software\Microsoft\NET Framework Setup\NDP\v2.0.50727\Increment
3.0                HKLM\Software\Microsoft\NET Framework Setup\NDP\v3.0\Version 
3.5                HKLM\Software\Microsoft\NET Framework Setup\NDP\v3.5\Version 
4.0 Client Profile HKLM\Software\Microsoft\NET Framework Setup\NDP\v4\Version 
4.0 Full Profile   HKLM\Software\Microsoft\NET Framework Setup\NDP\v4\Version 

[1] Windows Media Center or Windows XP Tablet Edition
[2] .NET 2.0 SP1
[3] .NET 2.0 Original Release (RTM)

同样,.NET 1.0使用字符串值,而其他所有使用DWORD.

补充说明

对于.NET 1.0,其中任何一个键的字符串值的格式为#,#,####,#.#,#,####字符串的一部分是Framework版本.

对于.NET 1.1,我们使用注册表项本身的名称,它代表版本号.

最后,如果你看一下依赖项,.NET 3.0会为.NET 2.0增加额外的功能,因此.NET 2.0和.NET 3.0都必须经过安装才能正确地说安装了.NET 3.0.同样,.NET 3.5为.NET 2.0和.NET 3.0添加了额外的功能,因此.NET 2.0,.NET 3.0和.NET 3.都应评估安装是否正确地说安装了.NET 3.5.

.NET 4.0安装了新版本的CLR(CLR版本4.0),它可以与CLR 2.0并行运行.

.NET 4.5的更新

v4.5如果安装了.NET 4.5,则注册表中不会有密钥.相反,您必须检查HKLM\Software\Microsoft\NET Framework Setup\NDP\v4\Full密钥是否包含一个名为的值Release.如果存在此值,则安装.NET 4.5,否则不安装.更多细节可以在这里和这里找到.


男人,微软没有人想过添加一个-version交换机?
.NET 4.0的键不太正确.我看到这些键:HKLM\Software\Microsoft\NET Framework Setup\NDP\v4\Client\Install HKLM\Software\Microsoft\NET Framework Setup\NDP\v4\Full\Install v4.0文件夹只有一个键,(默认),其值为deprecated.
这篇文章不包括4.5,并且即使安装了4.5,也没有在注册表中列出.
开个玩笑。我不敢相信这太愚蠢了!

2> 小智..:

以下知识库文章中有一个Microsoft官方对此问题的回答:

文章编号:318785 - 最后修改:2008年11月7日 - 修订:20.1如何确定安装了哪些版本的.NET Framework以及是否已应用Service Pack

不幸的是,它似乎不起作用,因为2.0目录中的mscorlib.dll版本有2.0版本,并且3.0或3.5目录中没有mscorlib.dll版本,即使安装了3.5 SP1 ...为什么微软官方的回答会如此误导吗?


+1 - 由于您最初链接到该页面,Microsoft可能已更新该页面.所以看起来这可能是关于此事的最佳官方消息来源之一.
它只能达到4.0

3> midspace..:

Framework 4 beta安装到不同的注册表项.

using System;
using System.Collections.ObjectModel;
using Microsoft.Win32;

class Program
{
    static void Main(string[] args)
    {
        foreach(Version ver in InstalledDotNetVersions())
            Console.WriteLine(ver);

        Console.ReadKey();
    }


    public static Collection InstalledDotNetVersions()
    {
        Collection versions = new Collection();
        RegistryKey NDPKey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\NET Framework Setup\NDP");
        if (NDPKey != null)
        {
            string[] subkeys = NDPKey.GetSubKeyNames();
            foreach (string subkey in subkeys)
            {
                GetDotNetVersion(NDPKey.OpenSubKey(subkey), subkey, versions);
                GetDotNetVersion(NDPKey.OpenSubKey(subkey).OpenSubKey("Client"), subkey, versions);
                GetDotNetVersion(NDPKey.OpenSubKey(subkey).OpenSubKey("Full"), subkey, versions);
            }
        }
        return versions;
    }

    private static void GetDotNetVersion(RegistryKey parentKey, string subVersionName, Collection versions)
    {
        if (parentKey != null)
        {
            string installed = Convert.ToString(parentKey.GetValue("Install"));
            if (installed == "1")
            {
                string version = Convert.ToString(parentKey.GetValue("Version"));
                if (string.IsNullOrEmpty(version))
                {
                    if (subVersionName.StartsWith("v"))
                        version = subVersionName.Substring(1);
                    else
                        version = subVersionName;
                }

                Version ver = new Version(version);

                if (!versions.Contains(ver))
                    versions.Add(ver);
            }
        }
    }
}



4> Franci Penov..:

枚举的子键HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP.每个子项都是.NET版本.它应该具有Install=1值,如果它存在于机器上,SP值显示Service Pack,MSI=1如果它是使用MSI安装的值.(例如,Windows Vista上的.NET 2.0没有最后一个,因为它是操作系统的一部分.)



5> Faisal Mq..:

我想检测我的系统上是否安装了.NET 4.5.2版本,而且我找不到比ASoft .NET Version Detector更好的解决方案.

此工具的快照显示了不同的.NET版本:

此工具的快照显示不同的.NET版本



6> 小智..:

对于64位操作系统,路径为:

HKEY_LOCAL_MACHINE\SOFTWARE\wow6432Node\Microsoft\NET Framework Setup\NDP\


这只是"有些"真实.64位版本的Windows中的注册表分为32位和64位密钥(许多32位密钥与64位密钥同名).`Wow6432Node`注册表项是WOW64注册表反射器的一部分,它反映了64位和32位注册表视图之间的某些键和值.应该不需要直接访问此密钥,因为注册表会自动处理重定向和镜像.

7> 小智..:

.NET 4.5.1的更新

既然.NET 4.5.1可用,则需要检查注册表中名为Release的键的实际值,而不仅仅是它的存在.值378758表示已安装.NET Framework 4.5.1.然而,如上所述这里该值是378675在Windows 8.1.



8> CarlR..:

有一个GUI工具,ASoft .NET Version Detector,它一直被证明是高度可靠的.它可以通过在命令行上指定XML输出的文件名来创建XML文件.

您可以将其用于自动化.它是一个很小的程序,用非.NET依赖语言编写,不需要安装.

推荐阅读
k78283381
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有