这里也提出了类似的问题,但这是针对。net 3.5的。具体来说,我正在寻找以下:
确定安装了哪些.NET Framework版本和服务包的正确方法是什么? 是否有可以使用的注册表项列表? 框架版本之间是否存在依赖关系?
这里也提出了类似的问题,但这是针对。net 3.5的。具体来说,我正在寻找以下:
确定安装了哪些.NET Framework版本和服务包的正确方法是什么? 是否有可以使用的注册表项列表? 框架版本之间是否存在依赖关系?
当前回答
微软在下面的知识库文章中给出了这个问题的官方答案:
文章ID: 318785 -最近审查:2008年11月7日-修订:20.1 如何确定安装了哪些版本的.NET Framework以及是否应用了服务包
不幸的是,它似乎不能工作,因为在2.0目录中的mscorlib.dll版本有一个2.0版本,并且在3.0或3.5目录中没有mscorlib.dll版本,即使安装了3.5 SP1…为什么微软的官方回答会如此错误?
其他回答
我想检测系统上是否安装了。net 4.5.2版本,我发现没有比ASoft . net version Detector更好的解决方案了。
该工具的快照显示了不同的.NET版本:
对于64位操作系统,路径为:
HKEY_LOCAL_MACHINE\SOFTWARE\wow6432Node\Microsoft\NET Framework Setup\NDP\
在Windows 7中(它应该也适用于Windows 8,但我还没有测试):
转到命令提示符
进入命令提示符的步骤:
点击开始菜单 在搜索框中输入“cmd”(不带引号) 打开用于cmd . exe
在cmd中输入此命令
wmic /namespace:\\root\cimv2 path win32_product where "name like '%%.NET%%'" get version
这给出了安装的最新版本的NET Framework。
你也可以试试雷蒙德。cc实用程序相同。
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框架版本(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及更高版本”,还有另一个函数。