这里提出了类似的问题,但它是针对.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并行运行.
v4.5
如果安装了.NET 4.5,则注册表中不会有密钥.相反,您必须检查HKLM\Software\Microsoft\NET Framework Setup\NDP\v4\Full
密钥是否包含一个名为的值Release
.如果存在此值,则安装.NET 4.5,否则不安装.更多细节可以在这里和这里找到.
注册表是检测是否安装了特定版本的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并行运行.
v4.5
如果安装了.NET 4.5,则注册表中不会有密钥.相反,您必须检查HKLM\Software\Microsoft\NET Framework Setup\NDP\v4\Full
密钥是否包含一个名为的值Release
.如果存在此值,则安装.NET 4.5,否则不安装.更多细节可以在这里和这里找到.
以下知识库文章中有一个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 ...为什么微软官方的回答会如此误导吗?
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 CollectionInstalledDotNetVersions() { 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); } } } }
枚举的子键HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP
.每个子项都是.NET版本.它应该具有Install=1
值,如果它存在于机器上,SP值显示Service Pack,MSI=1
如果它是使用MSI安装的值.(例如,Windows Vista上的.NET 2.0没有最后一个,因为它是操作系统的一部分.)
我想检测我的系统上是否安装了.NET 4.5.2版本,而且我找不到比ASoft .NET Version Detector更好的解决方案.
此工具的快照显示了不同的.NET版本:
对于64位操作系统,路径为:
HKEY_LOCAL_MACHINE\SOFTWARE\wow6432Node\Microsoft\NET Framework Setup\NDP\
既然.NET 4.5.1可用,则需要检查注册表中名为Release的键的实际值,而不仅仅是它的存在.值378758表示已安装.NET Framework 4.5.1.然而,如上所述这里该值是378675在Windows 8.1.
有一个GUI工具,ASoft .NET Version Detector,它一直被证明是高度可靠的.它可以通过在命令行上指定XML输出的文件名来创建XML文件.
您可以将其用于自动化.它是一个很小的程序,用非.NET依赖语言编写,不需要安装.