2008-10-13 18 views

Respuesta

18

Use Agregar/Quitar programas del Panel de control.

+0

Vaya figura. Más tarde, pensé que había perdido un punto "programáticamente" para su pregunta, Guy. –

132

Mire HKLM\SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5\. Uno de ellos debe ser verdad:

  • Version El valor de esa clave debe ser 3.5.30729.01
  • o el valor SP en la misma clave debe ser

En C# (tomado del primer comentario), podría hacer algo en estas líneas:

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 (name); var version = subKey.GetValue ("Version"). ToString(); var servicePack = subKey.GetValue ("SP").Encadenar(); –

+1

En mi máquina, 'Version' es' 3.5.30729.5420' y 'SP' es' 1' –

+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' –

27

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

+3

Solo te dice la versión más alta, por ejemplo si tiene 4, no le dirá si también tiene 3.5 sp 1 – codeulike

2

Suponiendo que el nombre está en todas partes "Microsoft .NET Framework 3.5 SP1", puede utilizar 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"); 
} 
+0

+1, la manera más fácil hasta el momento de verificar programáticamente si 3.5 SP1 está instalado, en realidad, si funcionó. Lo intenté, no funciona para mí, siempre devuelve falso. –

+0

Al pasar por la colección devuelta por GetSubKeyNames(), el nombre de texto sin formato se usa para algunos productos, para algunos, como los frameworks .net, se están utilizando los identificadores del producto {1ea1f -...}. Es por eso que no se puede encontrar. –

9

Tome un vistazo a este article que muestra las claves de registro que hay que buscar y proporciona una Biblioteca .NET que hará esto por usted.

En primer lugar, debe determinar si se instala .NET 3.5 consultando 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 del Framework está instalada.

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

Para tener las cosas correctas, realmente necesita asegurarse de que .NET Fx 2.0 y .NET Fx 3.0 estén instalados primero y luego verifique si .NET 3.5 está instalado. Si los tres son verdaderos, entonces puede verificar el nivel del paquete de servicio. Se existe el siguiente directorio

+1

se ha cambiado el enlace del artículo, aquí está la nueva ubicación: http://www.codeproject.com/KB/dotnet/frameworkversiondetection.aspx – Drake

4

Comprobar:

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

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

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

12

Vine a esta página mientras trataba de descubrir cómo detectar las versiones de frameworks instaladas en un servidor sin acceso a escritorio remoto o registro, 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); 
    } 
} 
+0

Funcionó como esperaba para mí. Acabo de crear un nuevo proyecto de sitio web, agregué el código y lo puse en el recurso compartido, luego solicité la página. – XIII

Cuestiones relacionadas