¿Cómo puedo detectar qué versiones de .NET Framework y service packs están instaladas?

Se hizo una pregunta similar aquí , pero fue específica para .NET 3.5. Específicamente, estoy buscando lo siguiente:

  1. ¿Cuál es la forma correcta de determinar qué versiones de .NET Framework y service packs están instaladas?
  2. ¿Hay una lista de claves de registro que se puedan usar?
  3. ¿Hay alguna dependencia entre las versiones de Framework?

El registro es la forma oficial de detectar si está instalada una versión específica del Marco.

enter image description here

Qué claves de registro se necesitan cambiar según la versión de Framework que esté buscando:

 Versión del marco clave del registro
 -------------------------------------------------- ----------------------------------------
 1.0 HKLM \ Software \ Microsoft \ .NETFramework \ Policy \ v1.0 \ 3705 
 1.1 HKLM \ Software \ Microsoft \ NET Framework Setup \ NDP \ v1.1.4322 \ Instalar 
 2.0 HKLM \ Software \ Microsoft \ NET Framework Setup \ NDP \ v2.0.50727 \ Instalar 
 3.0 HKLM \ Software \ Microsoft \ NET Framework Setup \ NDP \ v3.0 \ Setup \ InstallSuccess 
 3.5 HKLM \ Software \ Microsoft \ NET Framework Setup \ NDP \ v3.5 \ Instalar 
 4.0 Perfil del cliente HKLM \ Software \ Microsoft \ NET Framework Setup \ NDP \ v4 \ Client \ Install
 4.0 Perfil completo HKLM \ Software \ Microsoft \ NET Framework Setup \ NDP \ v4 \ Full \ Install

Generalmente estás buscando:

"Install"=dword:00000001 

a excepción de .NET 1.0, donde el valor es una cadena ( REG_SZ ) en lugar de un número ( REG_DWORD ).

La determinación del nivel del paquete de servicio sigue un patrón similar:

 Versión del marco clave del registro
 -------------------------------------------------- ----------------------------------------
 1.0 HKLM \ Software \ Microsoft \ Configuración activa \ Componentes instalados \ {78705f0d-e8db-4b2d-8193-982bdda15ecd} \ Version 
 1.0 [1] HKLM \ Software \ Microsoft \ Configuración activa \ Componentes instalados \ {FDC11A6F-17D1-48f9-9EA3-9051954BAA24} \ Version 
 1.1 HKLM \ Software \ Microsoft \ NET Framework Setup \ NDP \ v1.1.4322 \ SP 
 2.0 HKLM \ Software \ Microsoft \ NET Framework Setup \ NDP \ v2.0.50727 \ SP 
 3.0 HKLM \ Software \ Microsoft \ NET Framework Setup \ NDP \ v3.0 \ SP 
 3.5 HKLM \ Software \ Microsoft \ NET Framework Setup \ NDP \ v3.5 \ SP 
 4.0 Perfil del cliente HKLM \ Software \ Microsoft \ NET Framework Setup \ NDP \ v4 \ Client \ Servicing
 4.0 Perfil completo HKLM \ Software \ Microsoft \ NET Framework Setup \ NDP \ v4 \ Full \ Servicing

 [1] Windows Media Center o Windows XP Tablet Edition

Como puede ver, determinar el nivel de SP para .NET 1.0 cambia si se está ejecutando en Windows Media Center o Windows XP Tablet Edition. Nuevamente, .NET 1.0 usa un valor de cadena mientras que todos los demás usan un DWORD.

Para .NET 1.0, el valor de la cadena en cualquiera de estas teclas tiene un formato de #, #, ####, #. El último # es el nivel del Service Pack.

Si bien no pedí explícitamente esto, si quiere saber el número exacto de la versión del Marco, debería usar estas claves de registro:

 Versión del marco clave del registro
 -------------------------------------------------- ----------------------------------------
 1.0 HKLM \ Software \ Microsoft \ Configuración activa \ Componentes instalados \ {78705f0d-e8db-4b2d-8193-982bdda15ecd} \ Version 
 1.0 [1] HKLM \ Software \ Microsoft \ Configuración activa \ Componentes instalados \ {FDC11A6F-17D1-48f9-9EA3-9051954BAA24} \ Version 
 1.1 HKLM \ Software \ Microsoft \ NET Framework Setup \ NDP \ v1.1.4322 
 2.0 [2] HKLM \ Software \ Microsoft \ NET Framework Setup \ NDP \ v2.0.50727 \ Version 
 2.0 [3] HKLM \ Software \ Microsoft \ NET Framework Setup \ NDP \ v2.0.50727 \ Increment
 3.0 HKLM \ Software \ Microsoft \ NET Framework Setup \ NDP \ v3.0 \ Version 
 3.5 HKLM \ Software \ Microsoft \ NET Framework Setup \ NDP \ v3.5 \ Version 
 4.0 Perfil del cliente HKLM \ Software \ Microsoft \ NET Framework Setup \ NDP \ v4 \ Version 
 4.0 Perfil completo HKLM \ Software \ Microsoft \ NET Framework Setup \ NDP \ v4 \ Version 

 [1] Windows Media Center o Windows XP Tablet Edition
 [2] .NET 2.0 SP1
 [3] .NET 2.0 Original Release (RTM)

Nuevamente, .NET 1.0 usa un valor de cadena mientras que todos los demás usan un DWORD.

Notas adicionales

  • para .NET 1.0, el valor de la cadena en cualquiera de estas teclas tiene un formato de #,#,####,# . La porción #,#,#### de la cadena es la versión de Framework.

  • para .NET 1.1, utilizamos el nombre de la clave de registro, que representa el número de versión.

  • Finalmente, si observa las dependencias, .NET 3.0 agrega funcionalidad adicional a .NET 2.0, por lo que tanto .NET 2.0 como .NET 3.0 deben evacuarse como instalados para decir correctamente que .NET 3.0 está instalado. Del mismo modo, .NET 3.5 agrega funcionalidad adicional a .NET 2.0 y .NET 3.0, por lo que .NET 2.0, .NET 3.0 y .NET 3. Todos deben evaluar para instalarse para decir correctamente que .NET 3.5 está instalado.

  • .NET 4.0 instala una nueva versión del CLR (CLR versión 4.0) que se puede ejecutar en paralelo con CLR 2.0.

Actualización para .NET 4.5

No habrá una clave v4.5 en el registro si .NET 4.5 está instalado. En su lugar, debe verificar si la HKLM\Software\Microsoft\NET Framework Setup\NDP\v4\Full contiene un valor llamado Release . Si este valor está presente, se instala .NET 4.5; de lo contrario, no lo es. Más detalles se pueden encontrar aquí y aquí .

Hay una respuesta oficial de Microsoft a esta pregunta en el siguiente artículo de la base de conocimiento:

Id. De artículo: 318785 – Última revisión: 7 de noviembre de 2008 – Revisión: 20.1 Cómo determinar qué versiones de .NET Framework están instaladas y si se han aplicado service packs

Desafortunadamente, no parece funcionar, porque la versión de mscorlib.dll en el directorio 2.0 tiene una versión 2.0 y no hay una versión de mscorlib.dll en los directorios 3.0 o 3.5 aunque 3.5 SP1 esté instalado … ¿por qué? ¿La respuesta oficial de Microsoft estaría tan mal informada?

Framework 4 beta se instala en una clave de registro diferente.

 using System; using System.Collections.ObjectModel; using Microsoft.Win32; class Program { static void Main(string[] args) { foreach(Version ver in InstalledDotNetVersions()) Console.WriteLine(ver); Console.ReadKey(); } public static Collection InstalledDotNetVersions() { Collection versions = new Collection(); RegistryKey NDPKey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\NET Framework Setup\NDP"); if (NDPKey != null) { string[] subkeys = NDPKey.GetSubKeyNames(); foreach (string subkey in subkeys) { GetDotNetVersion(NDPKey.OpenSubKey(subkey), subkey, versions); GetDotNetVersion(NDPKey.OpenSubKey(subkey).OpenSubKey("Client"), subkey, versions); GetDotNetVersion(NDPKey.OpenSubKey(subkey).OpenSubKey("Full"), subkey, versions); } } return versions; } private static void GetDotNetVersion(RegistryKey parentKey, string subVersionName, Collection versions) { if (parentKey != null) { string installed = Convert.ToString(parentKey.GetValue("Install")); if (installed == "1") { string version = Convert.ToString(parentKey.GetValue("Version")); if (string.IsNullOrEmpty(version)) { if (subVersionName.StartsWith("v")) version = subVersionName.Substring(1); else version = subVersionName; } Version ver = new Version(version); if (!versions.Contains(ver)) versions.Add(ver); } } } } 

Enumere las subclaves de HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP . Cada subclave es una versión .NET . Debería tener Install=1 valor de Install=1 si está presente en la máquina, un valor de SP que muestre el paquete de servicio y un valor de MSI=1 si se instaló utilizando un MSI. (.NET 2.0 en Windows Vista no tiene el último, por ejemplo, ya que es parte del sistema operativo).

Quería detectar la presencia de .NET versión 4.5.2 instalada en mi sistema, y ​​no encontré una solución mejor que ASoft .NET Version Detector .

Instantánea de esta herramienta que muestra diferentes versiones de .NET:

Instantánea de esta herramienta que muestra diferentes versiones de .NET

Para un sistema operativo de 64 bits, la ruta sería:

 HKEY_LOCAL_MACHINE\SOFTWARE\wow6432Node\Microsoft\NET Framework Setup\NDP\ 

Actualización para .NET 4.5.1

Ahora que .NET 4.5.1 está disponible, debe verificarse el valor real de la clave denominada Liberar en el registro, no solo su existencia. Un valor de 378758 significa que .NET Framework 4.5.1 está instalado. Sin embargo, como se describe aquí, este valor es 378675 en Windows 8.1.

Hay una herramienta GUI disponible, ASoft .NET Version Detector , que siempre ha demostrado ser altamente confiable. Puede crear archivos XML especificando el nombre de archivo de la salida XML en la línea de comando.

Puede usar esto para la automatización. Es un progtwig pequeño, escrito en un idioma que no depende de .NET y no requiere instalación.

Necesitaba averiguar qué versión de .NET framework tenía en mi computadora, y todo lo que hice fue ir al panel de control y seleccionar la opción “Desinstalar un progtwig”. Después de eso, ordené los progtwigs por nombre y encontré Microsoft .NET Framework 4 Client Profile.

Aquí hay una secuencia de comandos de PowerShell para obtener las versiones de .NET framework instaladas

 function Get-KeyPropertyValue($key, $property) { if($key.Property -contains $property) { Get-ItemProperty $key.PSPath -name $property | select -expand $property } } function Get-VersionName($key) { $name = Get-KeyPropertyValue $key Version $sp = Get-KeyPropertyValue $key SP $install = Get-KeyPropertyValue $key Install if($sp) { "$($_.PSChildName) $name SP $sp" } else{ "$($_.PSChildName) $name" } } function Get-FrameworkVersion{ dir "hklm:\SOFTWARE\Microsoft\NET Framework Setup\NDP\" |? {$_.PSChildName -like "v*"} |%{ if( $_.Property -contains "Version") { Get-VersionName $_ } else{ $parent = $_ Get-ChildItem $_.PSPath |%{ $versionName = Get-VersionName $_ "$($parent.PSChildName) $versionName" } } } } $v4Directory = "hklm:\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full" if(Test-Path $v4Directory) { $v4 = Get-Item $v4Directory $version = Get-KeyPropertyValue $v4 Release switch($version){ 378389 {".NET Framework 4.5"; break;} 378675 {".NET Framework 4.5.1 installed with Windows 8.1 or Windows Server 2012 R2"; break;} 378758 {".NET Framework 4.5.1 installed on Windows 8, Windows 7 SP1, or Windows Vista SP2"; break;} 379893 {".NET Framework 4.5.2"; break;} { 393295, 393297 -contains $_} {".NET Framework 4.6"; break;} { 394254, 394271 -contains $_} {".NET Framework 4.6.1"; break;} { 394802, 394806 -contains $_} {".NET Framework 4.6.2"; break; } } } 

Fue escrito en base a Cómo: Determinar qué versiones de .NET Framework están instaladas . Utilice la función THE Get-FrameworkVersion () para obtener información sobre las versiones de .NET framework instaladas.

Utilizando la biblioteca Signum.Utilities de SignumFramework (que puede usar de forma autónoma), puede obtenerlo de forma agradable y sin tener que lidiar con el registro usted mismo:

 AboutTools.FrameworkVersions().ToConsole(); //Writes in my machine: //v2.0.50727 SP2 //v3.0 SP2 //v3.5 SP1 

En Windows 7 (también debería funcionar para Windows 8, pero no lo he probado):

Ir a un símbolo del sistema

Pasos para ir a un símbolo del sistema:

  1. Haga clic en el menú
  2. En el cuadro de búsqueda, escribe “cmd” (sin comillas)
  3. Abra cmd.exe

En cmd, escribe este comando

 wmic /namespace:\\root\cimv2 path win32_product where "name like '%%.NET%%'" get version 

Esto le da la última versión de NET Framework instalado.

También se puede probar Raymond.cc Utilties por el mismo.

Vea Cómo: Determinar qué versiones de .NET Framework están instaladas (MSDN).

MSDN propone un ejemplo de función que parece hacer el trabajo para la versión 1-4. Según el artículo, el resultado del método es:

 v2.0.50727 2.0.50727.4016 SP2 v3.0 3.0.30729.4037 SP2 v3.5 3.5.30729.01 SP1 v4 Client 4.0.30319 Full 4.0.30319 

Tenga en cuenta que para “versiones 4.5 y posteriores” hay otra función.