Eine ähnliche Frage wurde gestellt hier , war jedoch spezifisch für .NET 3.5. Konkret suche ich folgendes:
Die Registrierung ist der offizielle Weg um festzustellen, ob eine bestimmte Version des Frameworks installiert ist.
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.
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.
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 .
Eine offizielle Antwort von Microsoft auf diese Frage finden Sie im folgenden Knowledge Base-Artikel:
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?
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);
}
}
}
}
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.)
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:
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.
Für ein 64-Bit-Betriebssystem wäre der Pfad:
HKEY_LOCAL_MACHINE\SOFTWARE\wow6432Node\Microsoft\NET Framework Setup\NDP\
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.
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.
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.
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
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:
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.
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.