这里也提出了类似的问题,但这是针对。net 3.5的。具体来说,我正在寻找以下:

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


当前回答

我需要找出我电脑上的。net框架的版本,我所做的就是打开控制面板,选择“卸载程序”选项。之后,我把程序按名称分类,找到了Microsoft . net Framework 4客户端配置文件。

其他回答

使用Signum。SignumFramework的实用程序库(你可以单独使用),你可以很好地获得它,而不用自己处理注册表:

AboutTools.FrameworkVersions().ToConsole();
//Writes in my machine:
//v2.0.50727 SP2
//v3.0 SP2
//v3.5 SP1

我需要找出我电脑上的。net框架的版本,我所做的就是打开控制面板,选择“卸载程序”选项。之后,我把程序按名称分类,找到了Microsoft . net Framework 4客户端配置文件。

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<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);
            }
        }
    }
}

更新。net 4.5.1

现在. net 4.5.1可用了,需要检查注册表中名为Release的键的实际值,而不仅仅是它是否存在。值为378758表示安装了. net Framework 4.5.1。但是,在Windows 8.1上,这个值是378675。

请参阅如何:确定安装的. net框架版本(MSDN)。

MSDN提出了一个函数示例,它似乎完成了版本1-4的工作。根据文章,该方法输出为:

v2.0.50727  2.0.50727.4016  SP2
v3.0  3.0.30729.4037  SP2
v3.5  3.5.30729.01  SP1
v4
  Client  4.0.30319
  Full  4.0.30319

注意,对于“4.5及更高版本”,还有另一个函数。