为了账号安全,请及时绑定邮箱和手机立即绑定

如何检测安装了哪些.NET Framework版本和服务包?

/ 猿问

如何检测安装了哪些.NET Framework版本和服务包?

慕妹3242003 2019-06-15 11:18:49

如何检测安装了哪些.NET Framework版本和服务包?

有人问了一个类似的问题这里,但它是专门用于.NET 3.5的。具体来说,我在寻找以下内容:

  1. 确定安装了哪些.NET Framework版本和服务包的正确方法是什么?
  2. 是否有可使用的注册表项列表?
  3. 框架版本之间是否存在依赖关系?


查看完整描述

3 回答

?
大话西游666

注册表是官方方式若要检测是否安装了特定版本的框架,请执行以下操作。

enter image description here

根据您要查找的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).

确定服务包级别遵循类似的模式:

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,这些键的字符串值的格式为#、#。最后一个#是ServicePack级别。

虽然我没有明确地要求这样做,但是如果您想知道Framework的确切版本号,可以使用以下注册表项:

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。

  • NET4.0安装一个新版本的CLR(CLRVersion4.0),它可以与CLR2.0并行运行。

.NET 4.5的更新

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


查看完整回答
反对 回复 2019-06-15
?
富国沪深

微软在以下知识库文章中给出了这个问题的官方答案:

文章ID:318785-最后一次回顾:2008年11月7日-修订版:20.1如何确定安装了哪些版本的.NET Framework以及是否应用了ServicePack

不幸的是,它似乎无法工作,因为2.0目录中的m斯科lib.dll版本有一个2.0版本,而且在3.0或3.5目录中都没有m斯科lib.dll版本,即使安装了3.5SP1.为什么微软的官方回答会如此误导呢?


查看完整回答
反对 回复 2019-06-15
?
有只小跳蛙

Framework4beta安装到不同的注册表项。

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<Version> InstalledDotNetVersions()
    {
        Collection<Version> versions = new Collection<Version>();
        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<Version> 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);
            }
        }
    }}


查看完整回答
反对 回复 2019-06-15
  • 3 回答
  • 0 关注
  • 504 浏览
我要回答

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信