¿Cómo puedo saber si .NET 3.5 SP1 está instalado?


91

¿Cómo puedo saber si SP1 se ha instalado en un servidor que tiene .NET 3.5?

Respuestas:


18

Utilice Agregar o quitar programas del Panel de control.


1
Imagínate. Más tarde, pensé que me había perdido un punto "programático" de tu pregunta, Guy.
rp.

135

Mira HKLM\SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5\. Uno de estos debe ser cierto:

  • El Versionvalor en esa clave debe ser 3.5.30729.01
  • O el SPvalor en la misma clave debe ser 1

En C # (tomado del primer comentario), podría hacer algo en este sentido:

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 (nombre); var version = subKey.GetValue ("Versión"). ToString (); var servicePack = subKey.GetValue ("SP"). ToString ();
Chris Craft

2
En mi máquina, Versionestá 3.5.30729.5420y SPestá1
Kevin Smyth

2
En la línea de comando: 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

Habrá un problema: si un usuario no tiene .NET instalado, ¿cómo se ejecuta su programa escrito con .NET para detectar si .NET está instalado?
zwcloud

27

Puede ir a SmallestDotNet usando IE desde el servidor. Eso le dirá la versión y también le proporcionará un enlace de descarga si está desactualizado.


4
Sólo le informa que la versión más alta, sin embargo, por ejemplo, si tiene 4, no lo puedo decirle si usted también tiene 3.5 SP 1
codeulike

12

Llegué a esta página mientras intentaba averiguar cómo detectar las versiones de framework instaladas en un servidor sin acceso al escritorio o registro remotos, por lo que la respuesta de Danny V funcionó para mí.

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

Funcionó como se esperaba para mí. Acabo de crear un nuevo proyecto de sitio web, agregar el código y ponerlo en el recurso compartido, luego solicitó la página.
Kris van der Mast

9

Eche un vistazo a este artículo que muestra las claves de registro que debe buscar y proporciona una biblioteca .NET que lo hará por usted.

Primero, debe determinar si .NET 3.5 está instalado mirando HKLM \ Software \ Microsoft \ NET Framework Setup \ NDP \ v3.5 \ Install, que es un valor DWORD. Si ese valor está presente y se establece en 1, entonces esa versión de Framework está instalada.

Mire HKLM \ Software \ Microsoft \ NET Framework Setup \ NDP \ v3.5 \ SP, que es un valor DWORD que indica el nivel de Service Pack (donde 0 es sin Service Pack).

Para ser correcto, debe asegurarse de que .NET Fx 2.0 y .NET Fx 3.0 estén instalados primero y luego verificar si .NET 3.5 está instalado. Si las tres son verdaderas, puede verificar el nivel del paquete de servicio.


1
El enlace del artículo ha cambiado, aquí está la nueva ubicación: codeproject.com/KB/dotnet/frameworkversiondetection.aspx
Drake

5

Compruebe si existe el siguiente directorio:

En máquinas de 64 bits:% SYSTEMROOT% \ Microsoft.NET \ Framework64 \ v3.5 \ Microsoft .NET Framework 3.5 SP1 \

En máquinas de 32 bits:% SYSTEMROOT% \ Microsoft.NET \ Framework \ v3.5 \ Microsoft .NET Framework 3.5 SP1 \

Donde% SYSTEMROOT% es la variable ambiental SYSTEMROOT (por ejemplo, C: \ Windows).


2

Suponiendo que el nombre está en todas partes "Microsoft .NET Framework 3.5 SP1", puede usar esto:

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, la forma más fácil hasta ahora de comprobar mediante programación si está instalado 3.5 SP1, en realidad, si funcionó. Lo probé, no me funciona, siempre devuelve falso.
Evgeniy Berezovsky

Hojeando la colección devuelta por GetSubKeyNames (), el nombre de texto sin formato se usa para algunos productos, para algunos, como los marcos .net, se están usando los ID de producto {1ea1f -...}. Por eso no se puede encontrar.
Evgeniy Berezovsky
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.