Comment détecter what.NET les versions Framework et les packs de service sont installés?

une question similaire a été posée ici , mais elle était spécifique à .NET 3.5. Plus précisément, je cherche ce qui suit:

  1. Quelle est la bonne façon de déterminer les versions .net Framework et les paquets de service qui sont installés?
  2. Est-il une liste des clés de registre qui peuvent être utilisés?
  3. y a-t-il des dépendances entre les versions du Framework?
284
demandé sur Peter Mortensen 2008-10-14 01:22:21

13 réponses

, Le registre est officiel pour détecter si une version du Framework est installé.

enter image description here

les clés de Registre qui sont nécessaires changent en fonction de la version de cadre que vous recherchez:

Framework Version  Registry Key
------------------------------------------------------------------------------------------
1.0                HKLM\Software\Microsoft\.NETFramework\Policy\v1.005 
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

généralement vous recherchez:

"Install"=dword:00000001

sauf pour .NET 1.0, où la valeur est une chaîne ( REG_SZ ) plutôt qu'un nombre ( REG_DWORD ).

déterminer le niveau du service pack suit un schéma similaire:

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

comme vous pouvez le voir, déterminer le niveau de SP pour les changements .NET 1.0 si vous utilisez Windows Media Center ou Windows XP Tablet Edition. Encore une fois, .NET 1.0 utilise une valeur string alors que tous les autres utilisent un DWORD.

pour .NET 1.0 la valeur de chaîne à l'une ou l'autre de ces clés a un format de #,#,####,#. Le dernier # est le niveau de Service Pack.

bien que je ne l'ai pas explicitement demandé, si vous voulez savoir le numéro de version exacte du Framework, vous utilisez ces clés de registre:

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)

encore une fois, .NET 1.0 utilise une valeur string tandis que tous les autres utilisent un DWORD.

Notes Complémentaires

  • pour .NET 1.0 la valeur de chaîne à l'une ou l'autre de ces clés a un format de #,#,####,# . La partie #,#,#### de la chaîne est la version Framework.

  • pour .NET 1.1, nous utilisons le nom de la clé de Registre elle-même, qui représente le numéro de version.

  • enfin, si vous regardez les dépendances, .NET 3.0 ajoute des fonctionnalités supplémentaires à .NET 2.0 de sorte que les deux .NET 2.0 et .net 3.0 doivent tous deux evauuler comme étant installés pour dire correctement que .NET 3.0 est installer. De même, .NET 3.5 ajoute des fonctionnalités supplémentaires à .NET 2.0 et .net 3.0, donc .NET 2.0, .NET 3.0 et .NET 3. devrait tous évaluer à être installé pour dire correctement que .NET 3.5 est installé.

  • .NET 4.0 installe une nouvelle version du CLR (CLR version 4.0) qui peut fonctionner côte à côte avec le CLR 2.0.

mise à jour pour .NET 4.5

il n'y aura pas de v4.5 touche dans le Registre si .NET 4.5 est installé. Vous devez plutôt vérifier si la touche HKLM\Software\Microsoft\NET Framework Setup\NDP\v4\Full contient une valeur appelée Release . Si cette valeur est présente, .NET 4.5 est installé, sinon elle ne l'est pas. Plus de détails peuvent être trouvés ici et ici .

358
répondu Scott Dorman 2018-05-28 10:41:35

il y a une réponse officielle de Microsoft à cette question à l'article suivant de la base de connaissances:

numéro D'article: 318785 - dernière révision: 7 novembre 2008-Révision: 20.1 Comment déterminer quelles versions du .net Framework sont installées et si des paquets de service ont été appliqués

malheureusement, il ne semble pas fonctionner, parce que le mscorlib.dll version dans le répertoire 2.0 a une version 2.0, et il y a pas de mscorlib.dll version dans les répertoires 3.0 ou 3.5 même si 3.5 SP1 est installé ... pourquoi la réponse officielle de Microsoft serait-elle si mal informée?

17
répondu anon 2012-04-26 07:03:09

le Framework 4 beta s'installe sur une clé de Registre différente.

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);
            }
        }
    }
}
16
répondu midspace 2011-01-31 04:36:49

énumérer les sous-clés de HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP . Chaque sous-clé est une version .NET . Il devrait avoir la valeur Install=1 s'il est présent sur la machine, une valeur SP qui montre le service pack et une valeur MSI=1 s'il a été installé en utilisant un MSI. (.NET 2.0 sur Windows Vista n'a pas le dernier par exemple, car il fait partie du système D'exploitation.)

8
répondu Franci Penov 2012-04-13 22:07:40

je voulais détecter la présence de la version 4.5.2 de .NET installée sur mon système, et je n'ai pas trouvé de meilleure solution que ASoft .Net version Détecteur .

instantané de cet outil montrant différentes versions. net:

Snapshot of this tool showing different .NET versions

6
répondu Faisal Mq 2015-07-22 15:07:17

pour un OS 64 bits, le chemin serait:

HKEY_LOCAL_MACHINE\SOFTWARE\wow6432Node\Microsoft\NET Framework Setup\NDP\
5
répondu abhishek mehta 2012-05-05 16:07:16

mise à jour pour .NET 4.5.1

maintenant que .NET 4.5.1 est disponible, la valeur réelle de la clé nommée Release dans le Registre doit être vérifiée, pas seulement son existence. Une valeur de 378758 signifie que .net Framework 4.5.1 est installé. Cependant, comme décrit ici cette valeur est 378675 sur Windows 8.1.

5
répondu JasonMcF 2013-12-12 09:44:37

Il ya un outil GUI disponible, ASoft.Net version Détecteur , qui s'est toujours avéré très fiable. Il peut créer des fichiers XML en spécifiant le nom du fichier de la sortie XML sur la ligne de commande.

vous pouvez l'utiliser pour l'automatisation. C'est un programme minuscule, écrit dans un non-.NET langue dépendante et ne nécessite pas d'installation.

5
répondu CarlR 2015-07-22 15:02:36

j'avais besoin de savoir quelle version de .net framework j'avais sur mon ordinateur, et tout ce que j'ai fait était d'aller sur le panneau de configuration et de sélectionner l'option" Désinstaller un programme". Après cela, j'ai trié les programmes par nom, et J'ai trouvé Microsoft.NET Framework 4 Profil de Client.

4
répondu Kudzai K 2012-05-05 16:08:00

voici un script PowerShell pour obtenir les versions installées."

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

Il a été rédigé sur la base Comment faire pour Déterminer Qui .NET Framework Versions Sont Installées . Veuillez utiliser la fonction Get-Framorkversion () pour obtenir des informations sur les versions installées de .net framework.

3
répondu cezarypiatek 2017-07-10 08:33:46

utilisant le signe .Utilitaires bibliothèque de Signumfram Framework (que vous pouvez utiliser seul), vous pouvez l'obtenir bien et sans traiter avec le registre par vous-même:

AboutTools.FrameworkVersions().ToConsole();
//Writes in my machine:
//v2.0.50727 SP2
//v3.0 SP2
//v3.5 SP1
2
répondu mapache 2015-07-22 14:58:27

dans Windows 7 (Il devrait fonctionner pour Windows 8 aussi, mais je ne l'ai pas testé):

Aller à l'invite de commande

étapes pour passer à une invite de commande:

  1. Cliquez Sur Démarrer Menu
  2. dans la case de recherche, tapez " cmd "(sans guillemets)
  3. ouvrir cmd.exe

dans cmd, tapez cette commande

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

version de NET Framework installée.

on peut aussi essayer Raymond.cc utilise pour le même.

1
répondu Mayank Agarwal 2015-07-22 15:05:28

Voir Comment faire pour Déterminer Qui .NET Framework Versions Sont Installées (MSDN).

MSDN propose un exemple de fonction qui semble faire l'affaire pour la version 1-4. Selon l'article, la sortie de la méthode est:

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

notez que pour "versions 4.5 et suivantes" il y a une autre fonction.

0
répondu Olivier de Rivoyre 2014-11-20 10:23:28