如何判断.NET 3.5 SP1是否已安装?

93

如何查找已安装.NET 3.5的服务器上是否已安装SP1?

7个回答

139

查看HKLM\SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5\。其中一个条件必须成立:

  • 该键中的Version值应为 3.5.30729.01
  • 或相同键中的SP值应为 1

在C#中(取自第一个评论),您可以执行以下操作:

const string name = @"SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5";
RegistryKey subKey = Registry.LocalMachine.OpenSubKey(name);
var version = subKey.GetValue("Version").ToString();
var servicePack = subKey.GetValue("SP").ToString();

8
const string name = @"SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5"; RegistryKey subKey = Registry.LocalMachine.OpenSubKey(name);var version = subKey.GetValue("Version").ToString(); var servicePack = subKey.GetValue("SP").ToString();翻译: 将上述代码翻译为中文:const string name = @"SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5"; // 声明一个字符串变量 name,其值为 @"SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5"RegistryKey subKey = Registry.LocalMachine.OpenSubKey(name); // 打开本地计算机注册表中与指定名称关联的子项var version = subKey.GetValue("Version").ToString(); // 获取子项中 "Version" 键的值,并将其转换为字符串类型,存储在名为 version 的变量中var servicePack = subKey.GetValue("SP").ToString(); // 获取子项中 "SP" 键的值,并将其转换为字符串类型,存储在名为 servicePack 的变量中 - Chris Craft
2
在我的电脑上,“版本”是“3.5.30729.5420”,而“SP”是“1”。 - Kevin Smyth
3
在命令行中输入以下内容: reg query "HKLM\SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5" /V Version reg query "HKLM\SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5" /V SP 这将查询计算机上是否安装了.NET Framework 3.5,以及它的版本和服务包信息。 - Kevin Smyth
会有一个问题:如果用户没有安装.NET,那么你用.NET编写的程序如何运行以检测是否已安装.NET? - zwcloud

27
你可以使用服务器上的IE访问 SmallestDotNet,这将告诉你当前的版本并且如果你过期了还会提供下载链接。

4
只会告诉你最高的版本号,例如,如果你有4,它不会告诉你是否还有3.5 sp 1。 - codeulike

18
使用控制面板中的添加/删除程序。

1
想不到啊。后来我想,Guy,也许我错过了你问题中的“编程”点。 - rp.

12

我查找如何在没有远程桌面或注册表访问权限的情况下检测安装在服务器上的框架版本,于是我来到了这个页面,Danny V的回答对我很有帮助。

string path = System.Environment.SystemDirectory;
path = path.Substring( 0, path.LastIndexOf('\\') );
path = Path.Combine( path, "Microsoft.NET" );
// C:\WINDOWS\Microsoft.NET\

string[] versions = new string[]{
    "Framework\\v1.0.3705",
    "Framework64\\v1.0.3705",
    "Framework\\v1.1.4322",
    "Framework64\\v1.1.4322",
    "Framework\\v2.0.50727",
    "Framework64\\v2.0.50727",
    "Framework\\v3.0",
    "Framework64\\v3.0",
    "Framework\\v3.5",
    "Framework64\\v3.5",
    "Framework\\v3.5\\Microsoft .NET Framework 3.5 SP1",
    "Framework64\\v3.5\\Microsoft .NET Framework 3.5 SP1",
    "Framework\\v4.0",
    "Framework64\\v4.0"
};

foreach( string version in versions )
{
    string versionPath = Path.Combine( path, version );

    DirectoryInfo dir = new DirectoryInfo( versionPath );
    if( dir.Exists )
    {
        Response.Output.Write( "{0}<br/>", version );
    }
}

对我来说一切都按预期进行。我刚创建了一个新的网站项目,添加了代码并将其分享出去,然后请求页面。 - Kris van der Mast

10

请看这篇文章,它展示了你需要查找的注册表键,并提供了一个.NET库,可以帮助你进行检测。

首先,你需要查看HKLM\Software\Microsoft\NET Framework Setup\NDP\v3.5\Install,这是一个DWORD值,用于确定是否已安装.NET 3.5。如果该值存在且设置为1,则表示已安装该版本的框架。

然后,查看HKLM\Software\Microsoft\NET Framework Setup\NDP\v3.5\SP,这是一个DWORD值,用于指示服务包级别(其中0表示没有服务包)。

要正确地检测,你需要确保先安装.NET Fx 2.0和.NET Fx 3.0,然后再检查是否安装了.NET 3.5。如果三者都成立,则可以检查服务包级别。


1
文章链接已更改,请访问新的网址以获取有关.NET Framework版本检测的信息:http://www.codeproject.com/KB/dotnet/frameworkversiondetection.aspx - Drake

6

请检查以下目录是否存在:

在64位机器中: %SYSTEMROOT%\Microsoft.NET\Framework64\v3.5\Microsoft .NET Framework 3.5 SP1\

在32位机器中: %SYSTEMROOT%\Microsoft.NET\Framework\v3.5\Microsoft .NET Framework 3.5 SP1\

其中 %SYSTEMROOT% 是系统环境变量(例如 C:\Windows)。


2
假设到处都是“Microsoft .NET Framework 3.5 SP1”这个名称,你可以使用以下方法:
string uninstallKey = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall";
using (RegistryKey rk = Registry.LocalMachine.OpenSubKey(uninstallKey))
{
    return rk.GetSubKeyNames().Contains("Microsoft .NET Framework 3.5 SP1");
}

+1,目前编程中最简单的检查3.5 SP1是否已安装的方法 - 实际上,如果它能够工作的话。我尝试过了,但对我来说并不起作用,它总是返回false。 - Evgeniy Berezovsky
通过 GetSubKeyNames() 返回的集合进行快速浏览,可以发现一些产品使用纯文本名称,而一些产品(例如 .net 框架)使用产品 ID {1ea1f-...}。这就是为什么找不到它的原因。 - Evgeniy Berezovsky

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接