系统已安装了哪些 NET Framework 版本

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了系统已安装了哪些 NET Framework 版本相关的知识,希望对你有一定的参考价值。

一:

第一步: 打开“我的电脑“,在地址栏输入 %systemroot%\\Microsoft.NET\\Framework

如图:

查看本机安装了哪些.Net Framework版本的方法 - xiao_mege - xiao_mege的博客

第二步:从列出来的文件夹中,我们可以看到v1.0.3705 v2.0.50727 v3.0 v3.5

而这些目录显示的最高版本号即本机Microsoft .NET Framework 版本号,也就是3.5的。

如果你最高版本的目录只有v2.0.50727 那就是本地只有安装.net framework2.0

查看本机安装了哪些.Net Framework版本的方法 - xiao_mege - xiao_mege的博客

下面文章来源:http://support.microsoft.com/kb/318785/zh-cn
本文描述如何确定计算机上安装的 Microsoft .NET Framework 版本。还帮助您确定计算机上是否安装了任何 .NET Framework Service Pack。
.NET Framework 的版本
目前 .NET Framework 有三种发行版。这些发行版具有以下版本信息。
.NET
Framework
版本 修订版 版本
1.0 原始 RTM
Service Pack 1
Service Pack 2
Service Pack 3 1.0.3705.0
1.0.3705.209
1.0.3705.288
1.0.3705.6018
1.1 原始 RTM
Service Pack 1
包括在 Windows Server 2003 32 位 Service Pack 1 中 1.1.4322.573
1.1.4322.2032
1.1.4322.2300
2.0 原始 RTM 2.0.50727.42
注意:Microsoft .NET Framework 1.1 包括在 32 位版本的 Microsoft Windows Server 2003 中。

注意:应将此信息用作一般指南,以确定计算机上安装的 .NET Framework 版本。还请注意,具有列出的较高版本的文件可能是作为单个修补程序或修补程序汇总程序包的一部分提供的。.NET Framework 修补程序文件版本超出本文所介绍的范围。
乐博网补充: 目前已经发布了3.0 与3.5版的 .net framework

确定计算机上安装的 .NET Framework 版本
确定计算机上安装的 .NET Framework 版本的最简单方法是找到 %systemroot%\\Microsoft.NET\\Framework 文件夹。您可以将列出的 Framework 文件夹的地址粘贴到 Windows 资源管理器的地址栏中,以浏览到 Framework 文件夹。.NET Framework 的三个发行版包含在下列文件夹中:
? v1.0.3705
? v1.1.4322
? v2.0.50727
注意:如果您看到未在本文中列出的其他格式为 vN.N.NXXXX 的目录,则这些版本可能是 .NET Framework 的测试版或预发行版。那些版本超出本文所介绍的范围。

要确定计算机上安装的 .NET Framework 版本,请按照下列步骤操作:
1. 打开前面列表中的任一文件夹,然后找到 Mscorlib.dll 文件。
2. 右键单击该文件,然后单击“属性”。
3. 单击“版本”选项卡,然后记下文件版本。
4. 使用前面的列表确定计算机上安装的 .NET Framework 版本,然后单击“确定”。
对计算机上的每个 .NET Framework 版本,重复这些步骤。
乐博网补充:
只要你安装.net framework是装在默认目录下 其实在各自版本命名的目录中 随便抓一个.dll文件查看属性-版本信息 都与他外部目录名称的版本号一致的 .
二:
C#编程查看:
Environment.Version.ToString());
参考技术A 这个你可以自己安装的。

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

【中文标题】如何检测安装了哪些 .NET Framework 版本和服务包?【英文标题】:How do I detect what .NET Framework versions and service packs are installed? 【发布时间】:2010-09-16 23:28:36 【问题描述】:

here 提出了类似的问题,但它是特定于 .NET 3.5 的。具体来说,我正在寻找以下内容:

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

【问题讨论】:

这个问题与***.com/questions/198931/…和***.com/questions/182910/…密切相关 是的。我已经知道第一个(这是我在问题中提到的那个)。我不知道另一个。 我对这个问题(包括答案​​)和所有密切相关的问题完全忽略了SKU values 的存在印象深刻——这甚至区分了 4.5 和 4.5.1。 @springy76,这不解决 SKU 值存在的原因是,为了确定安装了哪些版本的框架,它们不相关。您提到的问题实际上是试图确定是否安装了“.NET 4.0.2”。这里的问题是没有 .NET 4.0.2,它是一个更新 (KB2544514),而不是框架版本或服务包。您可以在 MSDN (msdn.microsoft.com/en-us/library/hh925567(v=vs.110).aspx) 上查看这篇文章,了解有关如何检测安装了哪些更新的更多信息。 这里有Check which version of .net ... 【参考方案1】:

注册表是the official way,用于检测是否安装了特定版本的框架。

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

框架版本注册表项 -------------------------------------------------- -------------------------------------- 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 客户端配置文件 HKLM\Software\Microsoft\NET Framework Setup\NDP\v4\Client\Install 4.0 完整配置文件 HKLM\Software\Microsoft\NET Framework Setup\NDP\v4\Full\Install

通常您正在寻找:

"Install"=dword:00000001

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

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

框架版本注册表项 -------------------------------------------------- -------------------------------------- 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 框架设置\NDP\v1.1.4322\SP 2.0 HKLM\Software\Microsoft\NET 框架设置\NDP\v2.0.50727\SP 3.0 HKLM\Software\Microsoft\NET 框架设置\NDP\v3.0\SP 3.5 HKLM\Software\Microsoft\NET 框架设置\NDP\v3.5\SP 4.0 客户端配置文件 HKLM\Software\Microsoft\NET Framework Setup\NDP\v4\Client\Servicing 4.0 完整配置文件 HKLM\Software\Microsoft\NET Framework Setup\NDP\v4\Full\Servicing [1] Windows Media Center 或 Windows XP 平板电脑版

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

对于 .NET 1.0,这两个键的字符串值的格式为 #,#,####,#。最后一个 # 是 Service Pack 级别。

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

框架版本注册表项 -------------------------------------------------- -------------------------------------- 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 框架设置\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 客户端配置文件 HKLM\Software\Microsoft\NET Framework Setup\NDP\v4\Version 4.0 完整配置文件 HKLM\Software\Microsoft\NET Framework Setup\NDP\v4\Version [1] Windows Media Center 或 Windows XP 平板电脑版 [2] .NET 2.0 SP1 [3] .NET 2.0 原始版本 (RTM)

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

附加说明

对于 .NET 1.0,这两个键的字符串值的格式为 #,#,####,#。字符串的#,#,#### 部分是框架版本。

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

1234563同样,.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 更新

如果安装了 .NET 4.5,注册表中不会有 v4.5 键。相反,您必须检查HKLM\Software\Microsoft\NET Framework Setup\NDP\v4\Full 键是否包含名为Release 的值。如果存在此值,则安装 .NET 4.5,否则不安装。更多详情请见here和here。

【讨论】:

这似乎不适用于 Vista x64 下的 .NET 1.1。任何可能的地方都没有 v1.1.x 密钥。想法? .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即使安装也未在注册表中列出。 伙计,微软没有人想过添加 -version 开关吗? 开个玩笑。我不敢相信这太愚蠢了!【参考方案2】:

这是一个 PowerShell 脚本,用于获取已安装的 .NET 框架版本

function Get-KeyPropertyValue($key, $property)

    if($key.Property -contains $property)
    
        Get-ItemProperty $key.PSPath -name $property | select -expand $property
    


function Get-VersionName($key)

   $name = Get-KeyPropertyValue $key Version
   $sp = Get-KeyPropertyValue $key SP
   $install = Get-KeyPropertyValue $key Install
   if($sp)
   
        "$($_.PSChildName) $name SP $sp"
   
   else
    "$($_.PSChildName) $name"
   


function Get-FrameworkVersion
   dir "hklm:\SOFTWARE\Microsoft\NET Framework Setup\NDP\" |? $_.PSChildName -like "v*" |%
    if( $_.Property -contains "Version")
    
        Get-VersionName $_
    
    else
        $parent = $_
        Get-ChildItem $_.PSPath |%
            $versionName = Get-VersionName $_
            "$($parent.PSChildName) $versionName"
            
        
    



$v4Directory = "hklm:\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full"
if(Test-Path $v4Directory)

    $v4 = Get-Item $v4Directory
    $version = Get-KeyPropertyValue $v4 Release
    switch($version)
        378389 ".NET Framework 4.5"; break;
        378675 ".NET Framework 4.5.1 installed with Windows 8.1 or Windows Server 2012 R2"; break;
        378758 ".NET Framework 4.5.1 installed on Windows 8, Windows 7 SP1, or Windows Vista SP2"; break;
        379893 ".NET Framework 4.5.2"; break;
         393295, 393297 -contains $_ ".NET Framework 4.6"; break;
         394254, 394271 -contains $_ ".NET Framework 4.6.1"; break;
         394802, 394806 -contains $_ ".NET Framework 4.6.2"; break; 
    

它是基于 How to: Determine Which .NET Framework Versions Are Installed 编写的。请使用 Get-FrameworkVersion() 函数获取有关已安装的 .NET 框架版本的信息。

【讨论】:

【参考方案3】:

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

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

【讨论】:

【参考方案4】:

在 Windows 7 中(它应该也适用于 Windows 8,但我还没有测试过):

转到命令提示符

进入命令提示符的步骤:

    点击开始菜单 在搜索框中,输入“cmd”(不带引号) 打开 cmd.exe

在 cmd 中,输入此命令

wmic /namespace:\\root\cimv2 path win32_product where "name like '%%.NET%%'" get version

这提供了最新版本的 NET Framework 安装。

也可以试试Raymond.cc Utilties。

【讨论】:

cmd 中运行该行会得到ERROR: Description = Invalid namespace 我也收到ERROR: Description = Invalid namespace 这个命令给我错误! (从 Windows 7 终端执行) 感谢 MEMark、Peter、Smrita 的通知。【参考方案5】:

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

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

【讨论】:

Win 10 PC 上的附加选项是找到“打开或关闭 Windows 功能”,然后会列出 .NET 框架。【参考方案6】:

使用来自SignumFramework 的Signum.Utilities 库(您可以单独使用),您可以很好地获取它,而无需自己处理注册表:

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

【讨论】:

查看此方法的代码,就它使用的注册表项而言,它不是很完整,并且会完全错过 .NET 1.0 并且不区分 .NET 2.0 (RTM) 和 .NET 2.0 SP1。它也没有考虑框架版本之间的依赖关系。 不是一个好的解决方案。当您可以用大约 3 行代码自己完成相同的工作时,没有充分的理由下载整个库只是为了获得 .NET 版本。作为程序员,您应该能够“自己处理注册表”。 @DannySmurf 我不同意。引入 .NET 3.0 时,MS 应该将其包装在 .NET API 中(只要我们在同一个 CLR 上拥有一层以上的 FX)。我宁愿让我的应用程序使用实用程序库,然后当 4.1、6.1、7.100 到达时,我可以只更新库和我的应用程序需要的 .NET 层的配置条目。当然,如果这些库都不起作用,这个论点就站不住脚。【参考方案7】:

请参阅 How to: Determine Which .NET Framework Versions Are Installed (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 及更高版本”还有另一个功能。

【讨论】:

【参考方案8】:

.NET 4.5.1 更新

现在 .NET 4.5.1 可用,需要检查注册表中名为 Release 的键的实际值,而不仅仅是它的存在。值 378758 表示已安装 .NET Framework 4.5.1。但是,正如here 所述,此值在 Windows 8.1 上为 378675。

【讨论】:

【参考方案9】:

我需要找出我的计算机上的 .NET 框架版本,我所做的只是转到控制面板并选择“卸载程序”选项。之后,我按名称对程序进行了排序,找到了 Microsoft .NET Framework 4 Client Profile。

【讨论】:

谢谢——我尝试过的所有其他“解决方案”都有缺陷并且无法正常工作。确实如此。 我来寻找此信息的原因是卸载程序下的内容完全不可靠,至少在涉及 .NET Framework 时是如此。【参考方案10】:

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

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

【讨论】:

这只是“有点”真实。 64 位版本的 Windows 中的注册表分为 32 位和 64 位键(许多 32 位键与 64 位键同名)。 Wow6432Node 注册表项是 WOW64 注册表反射器的一部分,它反映了 64 位和 32 位注册表视图之间的某些键和值。由于注册表会自动处理重定向和镜像,因此无需直接访问此键。【参考方案11】:

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

Article ID: 318785 - Last Review: November 7, 2008 - Revision: 20.1 How to determine which versions of the .NET Framework are installed and whether service packs have been applied

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

【讨论】:

+1 - 自从您最初链接到该页面后,微软似乎已经更新了该页面。所以看起来这可能是关于此事的最佳官方消息来源之一。 只能升到4.0【参考方案12】:

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

【讨论】:

我没有在我的机器 (XP Pro) 上找到这个密钥,但我确实有这个:HKLM\SOFTWARE\Microsoft\.NETFramework。但是,您描述的各种价值观对我来说并不存在。 如果您安装了 .NET 1.1 或更高版本,您应该拥有此密钥。您提到的密钥仅用于 .NET 1.0。 reg 查询“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP”【参考方案13】:

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

【讨论】:

Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\NET Framework Setup\NDP", true) 更改为 Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\NET Framework Setup\NDP") 以避免非管理员用户出现安全异常。 酷,我使用了 LinqPad,它给了我完美的结果! share.linqpad.net/5cjihh.linq 奇怪的是,您分享了一些小细节(例如安装了哪个服务包版本),但您的代码忽略了更重要的信息(如果仅部分或完全安装了框架)!将注册表项“Client”和“Full”视为相同是错误的。如果仅“客户端”键退出,例如 System.Web 将不可用。您的代码也应返回此重要信息!如果用户在控制面板中卸载了“.NET Framework 4 Extended”,将会丢失几个程序集。

以上是关于系统已安装了哪些 NET Framework 版本的主要内容,如果未能解决你的问题,请参考以下文章

确定安装了哪些 NET Framework 版本

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

.net framework 版本低于4.5.2的系统可以重装win10解决吗

Windows XP 的最高版本 .net framework 安装

C# 检查已安装的 .NET Framework 和 MS Visual C++ Redist 版本

csharp 列出PC中所有已安装的.NET Framework版本