我如何知道是否已安装.NET 3.5 SP1?


Answers:


18

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


1
去搞清楚。后来,我以为我以编程方式错过了您的问题,盖伊。
rp。

135

看看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字符串名称= @“ SOFTWARE \ Microsoft \ NET Framework安装程序\ NDP \ v3.5”;RegistryKey子键= Registry.LocalMachine.OpenSubKey(name); var version = subKey.GetValue(“ Version”)。ToString(); var servicePack = subKey.GetValue(“ SP”)。ToString();
克里斯·克拉夫特

2
在我的机器,Version3.5.30729.5420SP1
凯文·史密斯

2
在命令行上: 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
Kevin Smyth

会有一个问题:如果用户未安装.NET,用.NET编写的程序如何运行以检测是否安装了.NET?
zwcloud

27

您可以从服务器使用IE 转到SmallestDotNet。这样可以告诉您版本,并且如果您过时了还可以提供下载链接。


4
不过只告诉您最高版本,例如,如果您有4,则不会告诉您是否也有3.5 sp 1
codeulike

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 );
    }
}

按预期工作。刚创建了一个新的网站项目,添加了代码并将其放在共享上,然后请求页面。
克里斯·范德·玛斯特

9

看一下这篇文章,其中显示了您需要查找的注册表项,并提供了一个.NET库来为您完成此操作。

首先,应通过查看HKLM \ Software \ Microsoft \ NET Framework Setup \ NDP \ v3.5 \ Install(这是一个DWORD值)来确定是否安装了.NET 3.5。如果存在该值并将其设置为1,则将安装该版本的Framework。

查看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。如果三个都正确,则可以检查Service Pack级别。


1
文章链接已更改,这里是新位置:codeproject.com/KB/dotnet/frameworkversiondetection.aspx
Drake

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)。


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。
尤金·别列索夫斯基

略过GetSubKeyNames()返回的集合,纯文本名称用于某些产品,对于某些产品-例如.net框架,正在使用产品ID {1ea1f -...}。这就是为什么找不到它的原因。
尤金·别列索夫斯基
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.