【发布时间】:2010-09-16 23:15:56
【问题描述】:
如何确定 SP1 是否已安装在具有 .NET 3.5 的服务器上?
【问题讨论】:
标签: .net-3.5 installation
如何确定 SP1 是否已安装在具有 .NET 3.5 的服务器上?
【问题讨论】:
标签: .net-3.5 installation
看看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();
【讨论】:
Version 是 3.5.30729.5420 和 SP 是 1
reg query "HKLM\SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5" /V Versionreg query "HKLM\SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5" /V SP
您可以使用服务器上的 IE 访问 SmallestDotNet。这将告诉您版本,如果您已过期,还会提供下载链接。
【讨论】:
使用控制面板中的添加/删除程序。
【讨论】:
我在试图弄清楚如何在不访问远程桌面或注册表的情况下检测安装在服务器上的框架版本时来到此页面,因此 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 );
}
}
【讨论】:
看看这个article,它显示了您需要查找的注册表项,并提供了一个 .NET 库来为您完成这项工作。
首先,您应该通过查看 HKLM\Software\Microsoft\NET Framework Setup\NDP\v3.5\Install 来确定是否安装了 .NET 3.5,这是一个 DWORD 值。如果该值存在并设置为 1,则安装该版本的框架。
查看 HKLM\Software\Microsoft\NET Framework Setup\NDP\v3.5\SP,这是一个 DWORD 值,表示 Service Pack 级别(其中 0 表示没有 Service Pack)。
要正确,您确实需要确保先安装 .NET Fx 2.0 和 .NET Fx 3.0,然后检查是否安装了 .NET 3.5。如果这三个都为真,那么您可以检查服务包级别。
【讨论】:
检查以下目录是否存在:
在 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% 是 SYSTEMROOT 环境变量(例如 C:\Windows)。
【讨论】:
假设名称到处都是“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");
}
【讨论】: