versiones tengo saber que net instalar instalado instaladas framework desinstalar debo como .net installation version-detection

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



que net framework debo instalar en windows 7 (18)

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 pueden usar?
  3. ¿Hay alguna dependencia entre las versiones de Framework?

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 programa". Después de eso, ordené los programas por nombre y encontré Microsoft .NET Framework 4 Client Profile.


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.



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<Version> InstalledDotNetVersions() { Collection<Version> versions = new Collection<Version>(); 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<Version> 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).


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?



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.



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.


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 programa pequeño, escrito en un idioma que no depende de .NET y no requiere instalación.



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:



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


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

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

Framework Version Registry Key ------------------------------------------------------------------------------------------ 1.0 HKLM/Software/Microsoft/.NETFramework/Policy/v1.0/3705 1.1 HKLM/Software/Microsoft/NET Framework Setup/NDP/v1.1.4322/Install 2.0 HKLM/Software/Microsoft/NET Framework Setup/NDP/v2.0.50727/Install 3.0 HKLM/Software/Microsoft/NET Framework Setup/NDP/v3.0/Setup/InstallSuccess 3.5 HKLM/Software/Microsoft/NET Framework Setup/NDP/v3.5/Install 4.0 Client Profile HKLM/Software/Microsoft/NET Framework Setup/NDP/v4/Client/Install 4.0 Full Profile 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:

Framework Version Registry Key ------------------------------------------------------------------------------------------ 1.0 HKLM/Software/Microsoft/Active Setup/Installed Components/{78705f0d-e8db-4b2d-8193-982bdda15ecd}/Version 1.0[1] HKLM/Software/Microsoft/Active Setup/Installed Components/{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 Client Profile HKLM/Software/Microsoft/NET Framework Setup/NDP/v4/Client/Servicing 4.0 Full Profile HKLM/Software/Microsoft/NET Framework Setup/NDP/v4/Full/Servicing [1] Windows Media Center or 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 de versión exacto del Marco, debería usar estas claves de registro:

Framework Version Registry Key ------------------------------------------------------------------------------------------ 1.0 HKLM/Software/Microsoft/Active Setup/Installed Components/{78705f0d-e8db-4b2d-8193-982bdda15ecd}/Version 1.0[1] HKLM/Software/Microsoft/Active Setup/Installed Components/{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 Client Profile HKLM/Software/Microsoft/NET Framework Setup/NDP/v4/Version 4.0 Full Profile HKLM/Software/Microsoft/NET Framework Setup/NDP/v4/Version [1] Windows Media Center or 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í .


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

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.