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

Respuestas:

18

Utilice Agregar o quitar programas del Panel de control.

rp.
fuente
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();
Rayo
fuente
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.

Andy mayo
fuente
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 );
    }
}
Mate
fuente
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.

Scott Dorman
fuente
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).

Danny Varod
fuente
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");
}
Panos
fuente
+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