it-swarm.com.de

Wie erkenne ich, welche .NET Framework-Versionen und Service Packs installiert sind?

Eine ähnliche Frage wurde gestellt hier , war jedoch spezifisch für .NET 3.5. Konkret suche ich folgendes:

  1. Wie lässt sich richtig bestimmen, welche .NET Framework-Versionen und Service Packs installiert sind?
  2. Gibt es eine Liste der Registrierungsschlüssel, die verwendet werden können?
  3. Gibt es Abhängigkeiten zwischen Framework-Versionen?
286
Scott Dorman

Die Registrierung ist der offizielle Weg um festzustellen, ob eine bestimmte Version des Frameworks installiert ist.

enter image description here

Welche Registrierungsschlüssel benötigt werden, hängt von der gesuchten Framework-Version ab:

 Registrierungsschlüssel für die Framework-Version 
 -------------------------------- -------------------------------------------------- ---- 
 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-Profil HKLM\Software\Microsoft\NET Framework-Setup\NDP\v4\Client\Install 
 4.0 Vollständiges Profil HKLM\Software\Microsoft\NET Framework-Setup\NDP\v4\Vollständig\Installieren 

Generell suchen Sie:

"Install"=dword:00000001

mit Ausnahme von .NET 1.0, wo der Wert eine Zeichenfolge ist (REG_SZ) statt einer Zahl (REG_DWORD).

Das Bestimmen des Service Pack-Levels folgt einem ähnlichen Muster:

 Registrierungsschlüssel für die Framework-Version 
 -------------------------------- -------------------------------------------------- ---- 
 1.0 HKLM\Software\Microsoft\Active Setup\Installierte Komponenten\{78705f0d-e8db-4b2d-8193-982bdda15ecd}\Version 
 1.0 [1] HKLM\Software\Microsoft\Aktives Setup\Installierte Komponenten\{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-Clientprofil HKLM\Software\Microsoft\NET Framework-Setup\NDP\v4\Client\Wartung 
 4.0-Vollprofil HKLM\Software\Microsoft\NET Framework-Setup\NDP\v4\Full\Servicing 
 
 [1] Windows Media Center oder Windows XP Tablet Auflage

Wie Sie sehen können, ändert sich das Ermitteln der SP Level für .NET 1.0, wenn Sie mit Windows Media Center oder Windows XP Tablet Edition arbeiten. Auch hier gilt .NET 1.0 verwendet einen Zeichenfolgenwert, während alle anderen ein DWORD verwenden.

Für .NET 1.0 hat der Zeichenfolgenwert an einem dieser Schlüssel das Format #, #, ####, #. Das letzte # ist die Service Pack-Stufe.

Obwohl ich nicht ausdrücklich darum gebeten habe, würden Sie diese Registrierungsschlüssel verwenden, wenn Sie die genaue Versionsnummer des Frameworks wissen möchten:

 Registrierungsschlüssel für die Framework-Version 
 -------------------------------- -------------------------------------------------- ---- 
 1.0 HKLM\Software\Microsoft\Active Setup\Installierte Komponenten\{78705f0d-e8db-4b2d-8193-982bdda15ecd}\Version 
 1.0 [1] HKLM\Software\Microsoft\Aktives Setup\Installierte Komponenten\{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-Profil HKLM\Software\Microsoft\NET Framework-Setup\NDP\v4\Version 
 4.0 Vollständiges Profil HKLM\Software\Microsoft\NET Framewor k Setup\NDP\v4\Version 
 
 [1] Windows Media Center oder Windows XP Tablet Edition 
 [2] .NET 2.0 SP1 
 [3] .NET 2.0 Original Release (RTM) 

Erneut verwendet .NET 1.0 einen Zeichenfolgenwert, während alle anderen ein DWORD verwenden.

Zusätzliche Bemerkungen

  • für .NET 1.0 hat der Zeichenfolgenwert in einem dieser Schlüssel das Format #,#,####,#. Das #,#,#### Teil der Zeichenfolge ist die Framework-Version.

  • für .NET 1.1 verwenden wir den Namen des Registrierungsschlüssels selbst, der die Versionsnummer darstellt.

  • Wenn Sie sich die Abhängigkeiten ansehen, fügt .NET 3.0 .NET 2.0 zusätzliche Funktionen hinzu, sodass sowohl .NET 2.0 als auch .NET 3.0 als installiert ausgewertet werden müssen, um zu bestätigen, dass .NET 3.0 installiert ist. Ebenso bietet .NET 3.5 zusätzliche Funktionen für .NET 2.0 und .NET 3.0. Daher sollten .NET 2.0, .NET 3.0 und .NET 3. als installiert ausgewertet werden, um zu bestätigen, dass .NET 3.5 installiert ist.

  • .NET 4.0 installiert eine neue Version der CLR (CLR-Version 4.0), die neben CLR 2.0 ausgeführt werden kann.

Update für .NET 4.5

Es wird kein v4.5 Geben Sie die Registrierung ein, wenn .NET 4.5 installiert ist. Stattdessen müssen Sie prüfen, ob das HKLM\Software\Microsoft\NET Framework Setup\NDP\v4\Full Schlüssel enthält einen Wert mit dem Namen Release. Wenn dieser Wert vorhanden ist, wird .NET 4.5 installiert, andernfalls nicht. Weitere Details finden Sie hier und hier .

363
Scott Dorman

Eine offizielle Antwort von Microsoft auf diese Frage finden Sie im folgenden Knowledge Base-Artikel:

Artikel-ID: 318785 - Geändert am: Montag, 7. November 2008 - Version: 20.1 So ermitteln Sie, welche Versionen von .NET Framework installiert sind und ob Service Packs angewendet wurden

Leider scheint es nicht zu funktionieren, da die mscorlib.dll-Version im 2.0-Verzeichnis eine 2.0-Version hat und weder in den 3.0- noch in den 3.5-Verzeichnissen eine mscorlib.dll-Version vorhanden ist, obwohl 3.5 SP1 installiert ist ... warum Wäre die offizielle Antwort von Microsoft so falsch informiert?

17
anon

Die Framework 4-Betaversion wird auf einem anderen Registrierungsschlüssel installiert.

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
midspace

Zählen Sie die Unterschlüssel von HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP Auf. Jeder Unterschlüssel ist eine . NET Version. Es sollte den Wert Install=1 Haben, wenn es auf dem Computer vorhanden ist, einen Wert SP), der das Service Pack anzeigt, und einen Wert MSI=1, Wenn es mithilfe einer MSI installiert wurde (.NET 2.0 unter Windows Vista hat zum Beispiel nicht das letzte, da es Teil des Betriebssystems ist.)

8
Franci Penov

Ich wollte feststellen, ob .NET Version 4.5.2 auf meinem System installiert ist, und fand keine bessere Lösung als ASoft .NET Version Detector.

Momentaufnahme dieses Tools mit verschiedenen .NET-Versionen:

Snapshot of this tool showing different .NET versions

7
Faisal Mq

Update für .NET 4.5.1

Jetzt, da .NET 4.5.1 verfügbar ist, muss der tatsächliche Wert des Schlüssels Release in der Registrierung überprüft werden, nicht nur dessen Existenz. Ein Wert von 378758 bedeutet, dass .NET Framework 4.5.1 installiert ist. Wie jedoch beschrieben hier lautet dieser Wert unter Windows 8.1 378675.

5
JasonMcF

Für ein 64-Bit-Betriebssystem wäre der Pfad:

HKEY_LOCAL_MACHINE\SOFTWARE\wow6432Node\Microsoft\NET Framework Setup\NDP\
5
abhishek mehta

Es gibt ein GUI-Tool, ASoft .NET Version Detector, das sich immer als äußerst zuverlässig erwiesen hat. Es kann XML-Dateien erstellen, indem der Dateiname der XML-Ausgabe in der Befehlszeile angegeben wird.

Sie können dies für die Automatisierung verwenden. Es ist ein winziges Programm, das in einer nicht von .NET abhängigen Sprache geschrieben ist und keine Installation erfordert.

5
CarlR

Ich musste herausfinden, welche Version von .NET Framework auf meinem Computer installiert war, und ich ging nur zur Systemsteuerung und wählte die Option "Programm deinstallieren". Danach sortierte ich die Programme nach Namen und fand Microsoft .NET Framework 4 Client Profile.

4
Kudzai K

Hier ist ein PowerShell-Skript zum Abrufen der installierten .NET Framework-Versionen

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

Es wurde basierend auf Gewusst wie: Ermitteln der installierten .NET Framework-Versionen geschrieben. Verwenden Sie die Funktion THE Get-FrameworkVersion (), um Informationen zu installierten .NET Framework-Versionen abzurufen.

3
cezarypiatek

Mit der Signum.Utilities Bibliothek von SignumFramework (die Sie eigenständig verwenden können) können Sie die Registrierung problemlos selbst erstellen:

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

In Windows 7 (es sollte auch für Windows 8 funktionieren, aber ich habe es nicht getestet):

Gehen Sie zu einer Eingabeaufforderung

Schritte zum Aufrufen einer Eingabeaufforderung:

  1. Klicken Sie auf Startmenü
  2. Geben Sie im Suchfeld "cmd" ein (ohne Anführungszeichen)
  3. Öffnen Sie cmd.exe

Geben Sie in cmd diesen Befehl ein

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

Dadurch wird die neueste Version von NET Framework installiert.

Man kann auch versuchen Raymond.cc Utilties für das gleiche.

1
Mayank Agarwal

Siehe Gewusst wie: Ermitteln der installierten .NET Framework-Versionen (MSDN).

MSDN schlägt ein Funktionsbeispiel vor, das die Aufgabe für Version 1-4 zu erfüllen scheint. Die Ausgabe der Methode ist laut Artikel:

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

Beachten Sie, dass es für "Versionen 4.5 und höher" eine andere Funktion gibt.

0