【问题标题】:How do I tell if .NET 3.5 SP1 is installed?如何判断是否安装了 .NET 3.5 SP1?
【发布时间】:2010-09-16 23:15:56
【问题描述】:

如何确定 SP1 是否已安装在具有 .NET 3.5 的服务器上?

【问题讨论】:

    标签: .net-3.5 installation


    【解决方案1】:

    看看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();
    

    【讨论】:

    • 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();
    • 在我的机器上,Version3.5.30729.5420SP1
    • 在命令行: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
    • 会有一个问题:如果用户没有安装.NET,你用.NET编写的程序如何运行来检测是否安装了.NET?
    【解决方案2】:

    您可以使用服务器上的 IE 访问 SmallestDotNet。这将告诉您版本,如果您已过期,还会提供下载链接。

    【讨论】:

    • 只告诉你最高版本,例如如果你有 4,它不会告诉你是否也有 3.5 sp 1
    【解决方案3】:

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

    【讨论】:

    • 去图吧。后来,我以为我错过了对您问题的“编程”点,盖伊。
    【解决方案4】:

    我在试图弄清楚如何在不访问远程桌面或注册表的情况下检测安装在服务器上的框架版本时来到此页面,因此 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 );
        }
    }
    

    【讨论】:

    • 按预期工作。刚新建了一个网站项目,加了代码放到分享里,然后请求页面。
    【解决方案5】:

    看看这个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。如果这三个都为真,那么您可以检查服务包级别。

    【讨论】:

    【解决方案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% 是 SYSTEMROOT 环境变量(例如 C:\Windows)。

    【讨论】:

      【解决方案7】:

      假设名称到处都是“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-...} .这就是它找不到的原因。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-09
      • 1970-01-01
      • 1970-01-01
      • 2010-10-07
      • 2013-10-26
      • 2011-03-23
      • 2011-05-14
      相关资源
      最近更新 更多