255 votos

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

Una pregunta similar fue hecha aquí, pero fue específico para .NET 3.5. En concreto, estoy buscando los siguientes:

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

327voto

Scott Dorman Puntos 25000

El registro es el oficial para detectar si una versión específica de que el Marco está instalado.

enter image description here

Claves del registro son necesarios cambiar dependiendo de la versión de Framework que está buscando:

Framework Versión De La Clave Del Registro
------------------------------------------------------------------------------------------
1.0 HKLM\Software\Microsoft\.NETFramework\Policy\v1.0\3705 
1.1 HKLM\Software\Microsoft\NET Framework Setup\F\v1.1.4322\Install 
2.0 HKLM\Software\Microsoft\NET Framework Setup\F\v2.0.50727\Install 
3.0 HKLM\Software\Microsoft\NET Framework Setup\F\v3.0\Setup\InstallSuccess 
3.5 HKLM\Software\Microsoft\NET Framework Setup\F\v3.5\Install 
4.0 Client Profile HKLM\Software\Microsoft\NET Framework Setup\F\v4\Client\Install
4.0 Perfil Completo HKLM\Software\Microsoft\NET Framework Setup\F\v4\Completo\Install

Generalmente usted está buscando:

"Install"=dword:00000001

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

Determinar el nivel de service pack sigue un patrón similar:

Framework Versión De La Clave Del Registro
------------------------------------------------------------------------------------------
1.0 HKLM\Software\Microsoft\Active Setup\installed Components\{78705f0d-e8db-4b2d-8193-982bdda15ecd}\Versión 
1.0[1] HKLM\Software\Microsoft\Active Setup\installed Components\{FDC11A6F-17D1-48f9-9EA3-9051954BAA24}\Versión 
1.1 HKLM\Software\Microsoft\NET Framework Setup\F\v1.1.4322\SP 
2.0 HKLM\Software\Microsoft\NET Framework Setup\F\v2.0.50727\SP 
3.0 HKLM\Software\Microsoft\NET Framework Setup\F\v3.0\SP 
3.5 HKLM\Software\Microsoft\NET Framework Setup\F\v3.5\SP 
4.0 Client Profile HKLM\Software\Microsoft\NET Framework Setup\F\v4\Client\Servicing
4.0 Perfil Completo HKLM\Software\Microsoft\NET Framework Setup\F\v4\Completo\Servicing

[1] Windows Media Center o Windows XP Tablet Edition

Como se puede ver, la determinación del nivel de SP para .NET 1.0 cambia si se ejecuta en Windows Media Center o Windows XP Tablet Edition. De nuevo, .NET 1.0 usa un valor de cadena, mientras que todos los demás el uso de un valor DWORD.

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

Si bien no se pide explícitamente para ello, si quieres saber el número exacto de la versión de que el Marco podría utilizar estas claves del registro:

Framework Versión De La Clave Del Registro
------------------------------------------------------------------------------------------
1.0 HKLM\Software\Microsoft\Active Setup\installed Components\{78705f0d-e8db-4b2d-8193-982bdda15ecd}\Versión 
1.0[1] HKLM\Software\Microsoft\Active Setup\installed Components\{FDC11A6F-17D1-48f9-9EA3-9051954BAA24}\Versión 
1.1 HKLM\Software\Microsoft\NET Framework Setup\F\v1.1.4322 
2.0[2] HKLM\Software\Microsoft\NET Framework Setup\F\v2.0.50727\Versión 
2.0[3] HKLM\Software\Microsoft\NET Framework Setup\F\v2.0.50727\Incremento
3.0 HKLM\Software\Microsoft\NET Framework Setup\F\v3.0\Versión 
3.5 HKLM\Software\Microsoft\NET Framework Setup\F\v3.5\Versión 
4.0 Client Profile HKLM\Software\Microsoft\NET Framework Setup\F\v4\Versión 
4.0 Perfil Completo HKLM\Software\Microsoft\NET Framework Setup\F\v4\Versión 

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

De nuevo, .NET 1.0 usa un valor de cadena, mientras que todos los demás el uso de un valor DWORD.

Notas Adicionales

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

  • para .NET 1.1, usamos el nombre de la clave del registro en sí, la cual representa el número de versión.

  • Por último, si usted mira las dependencias, .NET 3.0 añade una funcionalidad adicional a .NET 2.0, por lo tanto .NET 2.0 y .NET 3.0 debe tanto evaulate se han instalado correctamente decir que .NET 3.0 está instalado. Del mismo modo, .NET 3.5 añade una funcionalidad adicional a .NET 2.0 y .NET 3.0, así .NET 2.0, .NET 3.0, y .NET 3. todos deberíamos evaluar a ser instalado correctamente decir que .NET 3.5 instalado.

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

Actualización para .NET 4.5

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

16voto

anon Puntos 159

Hay un oficial de Microsoft respuesta a esta pregunta en el siguiente artículo de knowledge base:

ID. de artículo: 318785 - Última Revisión: 7 de noviembre de 2008 - Versión: 20.1 Cómo determinar las versiones que de la .NET Marco está instalado y si se han aplicado los service pack

Por desgracia, no parece funcionar, porque el mscorlib.dll la versión en el directorio 2.0 tiene una versión 2.0, y no hay mscorlib.dll la versión en la 3.0 o 3.5 directorios aunque 3.5 SP1 está instalado ... ¿por qué el oficial de Microsoft respuesta tan mal informado?

15voto

midspace Puntos 595

La beta del Framework 4 se instala en una clave de registro diferentes.

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);
            }
        }
    }
}

8voto

Franci Penov Puntos 45358

Enumerar las subclaves de HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP . Cada subclave es una versión de .NET . Debe tener Install=1 valor si está presente en la máquina, un valor de SP que muestra el service pack y un MSI=1 valor si se instala utilizando un MSI. (.NET 2.0 en Windows Vista no tiene la última vez por ejemplo, como parte del sistema operativo.)

5voto

abhishek mehta Puntos 51

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

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

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by: