66 Stimmen

Gibt es einen Befehlszeilenbefehl, um zu überprüfen, welche Version von .NET installiert ist?

Ich habe eine Reihe von Skripten für skriptgesteuerte Installationen. Sie können die Skripte auf jedem Server 2008-Rechner verwenden. Ich muss jedoch mit einer Dos-Batch-Datei überprüfen, ob .NET 3.5 installiert wurde (bevor die Skripte ausgeführt werden). Ist das möglich?

Ich weiß, dass ich prüfen kann, ob eine Datei in der C:\WINDOWS\Microsoft.NET\Framework\v3.5 existiert, aber es wäre schön, etwas Zuverlässigeres zu haben.

Ich möchte überprüfen, ob es tatsächlich installiert ist, und nicht nur, ob das Verzeichnis/die Datei existiert.

Danke

76voto

Amit Naidu Punkte 2355

Da Sie sagten, dass Sie wissen wollen, ob es tatsächlich installiert ist, denke ich, dass der beste Weg (abgesehen von der Ausführung von versionsspezifischem Code) darin besteht, den beruhigend benannten "Install"-Registrierungsschlüssel zu überprüfen. 0x1 bedeutet ja:

C:\>reg query "HKLM\SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5"| findstr Install

   Install     REG_DWORD       0x1
   InstallPath REG_SZ  c:\WINNT\Microsoft.NET\Framework\v3.5\

Dies ist zufällig auch die von Microsoft empfohlene". offizielle Methode .

WMI ist eine weitere Möglichkeit, scheint aber unpraktisch zu sein (Langsam? Dauert 2 Minuten auf meiner C2D, SSD). Vielleicht funktioniert es besser auf Ihrem Server:

C:\>wmic product where "Name like 'Microsoft .Net%'" get Name, Version

Name                                                Version
Microsoft .NET Compact Framework 1.0 SP3 Developer  1.0.4292
Microsoft .NET Framework 3.0 Service Pack 2         3.2.30729
Microsoft .NET Framework 3.5 SP1                    3.5.30729
Microsoft .NET Compact Framework 2.0                2.0.5238
Microsoft .NET Framework 4 Client Profile           4.0.30319
Microsoft .NET Framework 4 Multi-Targeting Pack     4.0.30319
Microsoft .NET Framework 2.0 Service Pack 2         2.2.30729
Microsoft .NET Framework 1.1                        1.1.4322
Microsoft .NET Framework 4 Extended                 4.0.30319

C:\>wmic product where "name like 'Microsoft .N%' and version='3.5.30729'" get name

Name  
Microsoft .NET Framework 3.5 SP1

Abgesehen davon denke ich, dass der einzige Weg, um 100% sicher zu sein, tatsächlich eine einfache Konsolenanwendung ausgeführt wird, die für Ihre Framework-Version kompiliert wurde. Ich persönlich halte dies für unnötig und vertraue der Registry-Methode sehr gut.

Schließlich könnten Sie eine Intranet-Testseite einrichten, die von Ihrem Server aus erreichbar ist und den User Agent ausspäht, um die .NET-Versionen zu ermitteln. Aber das ist natürlich keine Batch-Datei-Lösung. Siehe auch Dokument hier .

18voto

MacG Punkte 201

Sie meinen, dass ein DOS-Befehl wie der folgende die installierten .NET-Frameworks anzeigt:

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

Es kann dann folgendes angezeigt werden:

Version
4.0.30319

WMIC ist recht nützlich, wenn man es erst einmal beherrscht, viel einfacher als WMI in Skripten zu kodieren, je nachdem, was man erreichen will.

15voto

Andrew Hare Punkte 332190

Leider ist es am besten, wenn Sie nach diesem Verzeichnis suchen. Ich bin mir nicht sicher, was Sie mit "tatsächlich installiert" meinen, da .NET 3.5 die gleiche CLR wie .NET 3.0 und .NET 2.0 verwendet, so dass alle neuen Funktionen in neue Baugruppen verpackt sind, die sich in diesem Verzeichnis befinden. Wenn das Verzeichnis vorhanden ist, ist 3.5 im Grunde genommen installiert.

Das Einzige, was ich hinzufügen würde, ist, dass man den Dirigenten auf diese Weise finden sollte, um maximale Flexibilität zu erreichen:

%windir%\Microsoft.NET\Framework\v3.5

5voto

ajma Punkte 11955

Sie können selbst eine kleine Konsolenanwendung schreiben und System.Environment.Version verwenden, um die Version herauszufinden. Scott Hanselman gibt eine Blogbeitrag darüber.

Oder suchen Sie in der Registrierung nach den installierten Versionen. HKLM \Software\Microsoft\NETFramework Einrichtung \NDP

4voto

Wenn Sie eine kleine Konsolenanwendung ausführen wollen, können Sie ebenso gut die clrver.exe aus dem .NET SDK. Ich glaube nicht, dass Sie sauberer werden können als das. Dies ist nicht meine Antwort (aber ich zufällig zustimmen), fand ich es hier .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X