How do I detect what .NET Framework versions and service packs are installed?
这里也提出了类似的问题,但它是特定于.NET 3.5的。具体来说,我在寻找以下内容:
注册表是检测是否安装了框架的特定版本的官方方法。
根据您要查找的框架版本,需要更改哪些注册表项:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | Framework Version Registry Key ------------------------------------------------------------------------------------------ 1.0 HKLM\Software\Microsoft\.NETFramework\Policy\v1.0\3705 1.1 HKLM\Software\Microsoft ET Framework Setup DP\v1.1.4322\Install 2.0 HKLM\Software\Microsoft ET Framework Setup DP\v2.0.50727\Install 3.0 HKLM\Software\Microsoft ET Framework Setup DP\v3.0\Setup\InstallSuccess 3.5 HKLM\Software\Microsoft ET Framework Setup DP\v3.5\Install 4.0 Client Profile HKLM\Software\Microsoft ET Framework Setup DP\v4\Client\Install 4.0 Full Profile HKLM\Software\Microsoft ET Framework Setup DP\v4\Full\Install |
一般来说,您需要:
1 | "Install"=dword:00000001 |
除了.NET 1.0,其中值是字符串(
确定Service Pack级别遵循类似的模式:
2如您所见,如果在Windows Media Center或Windows XP Tablet Edition上运行,则确定.NET 1.0的SP级别将发生更改。同样,.NET 1.0使用字符串值,而其他所有的都使用双字。
对于.NET 1.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 | 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 ET Framework Setup DP\v1.1.4322 2.0[2] HKLM\Software\Microsoft ET Framework Setup DP\v2.0.50727\Version 2.0[3] HKLM\Software\Microsoft ET Framework Setup DP\v2.0.50727\Increment 3.0 HKLM\Software\Microsoft ET Framework Setup DP\v3.0\Version 3.5 HKLM\Software\Microsoft ET Framework Setup DP\v3.5\Version 4.0 Client Profile HKLM\Software\Microsoft ET Framework Setup DP\v4\Version 4.0 Full Profile HKLM\Software\Microsoft ET Framework Setup DP\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使用字符串值,而其他所有的都使用双字。
附加说明对于.NET 1.0,这些键中任何一个的字符串值的格式都为
#,#,####,# 。字符串的#,#,#### 部分是框架版本。对于.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的更新
如果安装了.NET 4.5,注册表中就不会有
ET Framework Setup
DP\v4\Full
微软在以下知识库文章中对此问题给出了官方答案:
文章ID: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…为什么微软官方的回答会如此错误?
框架4测试版安装到不同的注册表项。
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 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | 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 ET Framework Setup DP"); 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); } } } } |
枚举
ET Framework Setup
DP
i想要检测的存在。NET版本4.5.2安装在我的系统,我发现没有更好的解决方案比asoft .NET版本的探测器。
这显示不同的快照工具。NET版本:
有一个可用的GUI工具,asoft .NET版本的探测器,它一直被证明非常可靠。它可以创建XML文件的XML文件的名称指定一个命令行输出。
你可以使用本研究的自动化。这是一个小程序,写在。NET语言非依赖性和不需要安装。
更新for .NET 4.5.1
现在是可用的。NET 4.5.1《实际价值的关键命名发布在注册表中不需要,不只是它的存在。a价值意味378758 4.5.1是。NET框架安装。然而,这里描述的是一个在Windows 378675 8.1本价值。
对于64位操作系统,路径为:
1 2 3 | HKEY_LOCAL_MACHINE\SOFTWARE\wow6432Node\Microsoft ET Framework Setup DP\ |
我需要找出我的计算机上的.NET框架的版本,我所做的就是进入控制面板并选择"卸载程序"选项。之后,我按名称对程序进行了排序,找到了Microsoft.NET Framework 4客户端配置文件。
这里是一个PowerShell脚本获取安装.NET Framework版本
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 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | 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 ET Framework Setup DP" |? {$_.PSChildName -like"v*"} |%{ if( $_.Property -contains"Version") { Get-VersionName $_ } else{ $parent = $_ Get-ChildItem $_.PSPath |%{ $versionName = Get-VersionName $_ "$($parent.PSChildName) $versionName" } } } } $v4Directory ="hklm:\SOFTWARE\Microsoft ET Framework Setup DP\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; } } } |
它是基于如何写:这是安装.NET Framework的版本确定。请使用"GET frameworkversion()函数得到的信息对安装.NET Framework的版本。
使用signumframework中的signum.utilities库(可以单独使用),您可以很好地获得它,而无需单独处理注册表:
4(它应该工作在Windows 7的Windows 8因此, ;但我还没有测试它):
去一个命令提示符
步骤:去一个命令提示符
本命令在CMD型
1 2 | wmic /namespace:\ oot\cimv2 path win32_product where"name like '%%.NET%%'" get version |
这给安装最新版本的.NET Framework。
一个可以尝试同一个raymond.cc公用事业。
请参阅如何:确定安装了哪些.NET框架版本(msdn)。
对于版本1-4,msdn提出了一个函数示例。根据本文,方法输出为:
1 2 3 4 5 6 | 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及更高版本",还有另一个功能。