¿Cómo puedo saber si SP1 se ha instalado en un servidor que tiene .NET 3.5?
Respuestas:
Mira HKLM\SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5\
. Uno de estos debe ser cierto:
Version
valor en esa clave debe ser 3.5.30729.01SP
valor en la misma clave debe ser 1En 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();
Version
está 3.5.30729.5420
y SP
está1
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
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.
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 );
}
}
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.
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).
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");
}