2009-01-29 6 views
58

Ich habe eine Reihe von Skripts für die Skriptinstallationen. Sie können die Skripts auf jedem Server 2008-Computer verwenden. Ich muss jedoch überprüfen, ob .NET 3.5 installiert wurde (bevor die Skripts ausgeführt werden), indem Sie eine Dos-Batch-Datei verwenden. Ist das möglich?Gibt es einen Befehlszeilenbefehl zum Überprüfen, welche Version von .NET installiert ist

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

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

Danke

Antwort

13

Leider wäre der beste Weg, nach diesem Verzeichnis zu suchen. Ich bin mir nicht sicher, was Sie meinen, aber "tatsächlich installiert", da .NET 3.5 die gleiche CLR wie .NET 3.0 und .NET 2.0 verwendet, so dass alle neuen Funktionen in neue Assemblies eingepackt werden, die in diesem Verzeichnis enthalten sind. Wenn das Verzeichnis dort ist, dann ist 3.5 installiert.

Das Einzige, was ich hinzufügen würde, ist die dir auf diese Weise für ein Maximum an Flexibilität zu finden:

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

Danke für die Hilfe. Ich denke, die Überprüfung für das Verzeichnis wird gut funktionieren. Auch, danke für die Erinnerung über die Verwendung von% windir% –

+5

Diese einfache Verzeichnisprüfung hält nicht mehr gut, um die Version zu erkennen. Es gibt kein v4.5-Verzeichnis für .NET Framework 4.5 -http: //stackoverflow.com/questions/12070518/where-is-the-net-framework-4-5-directory – mvark

+0

Überprüfen Sie diesen MSDN-Artikel: [How to : Ermitteln Sie, welche .NET Framework-Versionen installiert sind (https://msdn.microsoft.com/en-us/library/hh925568 (v = vs.110) .aspx # net_d). Es erklärt, dass Sie sich nicht mehr nur auf das Verzeichnis verlassen können. Für Versionen> = 4.0 müssen Sie die Registrierung analysieren. – Matt

5

Sie können sich eine kleine Konsole App schreiben und System.Environment.Version verwenden, um die Version zu erfahren. Scott Hanselman gibt eine blog post darüber.

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

+1

Ich liebe es - Hanselmans Blog hat ein Widget, das "Jetzt spielt: Alicia Keys - Wenn ich deine Frau war/Walk On By" mit dem iTunes Store verbunden ist. : D – dkretz

+0

Nur Problem ist, dass meine Skripte auf einem frisch installierten vm mit nichts als dem Basisbetriebssystem laufen können. Ich denke, dass die Überprüfung für das Verzeichnis funktionieren wird für das, was ich brauche. –

+0

Wenn Sie sich für SP1 im Vergleich zu nicht SP1 interessieren, werden Sie etwas anderes verwenden müssen, z. B. das Überprüfen der Registrierung. – ajma

4

Wenn Sie eine kleine Konsole App ausführen möchten, können Sie auch clrver.exe aus dem .NET SDK installieren. Ich glaube nicht, dass Sie sauberer werden können. Dies ist nicht meine Antwort (aber ich stimme zu), ich fand es here.

16

bedeuten Sie einen DOS-Befehl wie unten wird die Arbeit installiert .NET Frameworks Anzeige:

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

Im Folgenden dann angezeigt:

Version 
4.0.30319 

WMIC ist sehr nützlich, wenn Sie Master Verwenden Sie es, viel einfacher als das Codieren von WMI in Skripts, je nachdem, was Sie erreichen möchten.

+2

Ich versuchte diesen Befehl, wörtlich, aber es hing nur dort und erstarrte und gab keine Antwort –

+0

Aviad, ja das gleiche hier. Du musst nur warten. Es dauerte 3 Minuten! –

+0

Wow 3 Minuten? So lang? Meine virtuelle Maschine hat es in ungefähr 10 Sekunden getan. Gibt es eine Möglichkeit, es auf die neueste Version der Installation zu beschränken und den Pfad zum Speicherort auf dem Laufwerk anzuzeigen? – thefoyer

69

Da Sie gesagt haben, Sie möchten wissen, ob es tatsächlich installiert ist, denke ich, der beste Weg (kurz laufender versionsspezifischer Code) ist, den beruhigend genannten Registrierungsschlüssel "Install" 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 geschieht auch die official method "Microsoft empfohlen" zu sein.

WMI ist eine andere Möglichkeit, aber scheint nicht praktikabel (langsam? Dauert 2 min auf meiner C2D, SSD). Vielleicht klappt es besser auf dem 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 

Anders als diese Ich denke, der einzige Weg zu 100% sicher zu sein, ist eigentlich eine einfache Konsolenanwendung führen Sie Ihre Framework-Version kompiliert Targeting. Persönlich halte ich das für unnötig und vertraue der Registry-Methode gut.

Schließlich können Sie eine Intranet-Test-Site einrichten, die von Ihrem Server erreichbar ist und den Benutzer-Agenten schnüffelt, um .NET-Versionen festzustellen. Aber das ist natürlich keine Batch-Datei-Lösung.Siehe auch doc here.

+2

Diese Methode zeigt nicht alle .NET Framework-Versionen von GAC an. Nur 4.0 in meinem Fall: * Microsoft .NET Framework 4 Multi-Targeting-Paket 4.0.30319 *, * Microsoft .NET Framework 4 Erweitert 4.0.30320 *, * Microsoft .NET Framework 4 Client-Profil 4.0.30320 *. Die Versionen 2.0.50727, 3.0.30729.5420 und 3.5.30729.5420 sind ebenfalls installiert. – Mosc

+0

Was ist mit .NET 4.5? – Kiquenet

+1

Ich verwende dieses für 4.5: reg Abfrage "HKLM \ SOFTWARE \ Microsoft \ NET Framework Setup \ NDP \ v4 \ Full" | findstr Version –

0

REM Suche nach der Konfigurationsdatei, wenn diese nicht beendet dann muss der Benutzer nicht den Rahmen 2.0 `Net hat

SET FileName=%windir%\Microsoft.NET\Framework\v2.0.50727\CONFIG 
IF EXIST %FileName% GOTO INSTALL_DIALER 
ECHO.You currently do not have the Microsoft(c) .NET Framework 2.0 installed. 
0

Dies ist für mich arbeiten:

@echo off 
SETLOCAL ENABLEEXTENSIONS 

echo Verify .Net Framework Version 

for /f "delims=" %%I in ('dir /B /A:D %windir%\Microsoft.NET\Framework') do (
    for /f "usebackq tokens=1,3 delims= " %%A in (`reg query "HKLM\SOFTWARE\Microsoft\NET Framework Setup\NDP\%%I" 2^>nul ^| findstr Install`) do (
     if %%A==Install (
      if %%B==0x1 (
       echo %%I 
      ) 
     ) 
    ) 
) 

echo Do you see version v4.5.2 or greater in the list? 

pause 

ENDLOCAL 

Die 2^>nul leitet Fehler zu Dampf um.

+2

MS hat den Registrierungsordner 'v4.0' zugunsten eines Ordners 'v4' mit einer Versionsnummer wie 393297 = 4.6 abgelehnt. https://msdn.microsoft.com/en-us/library/hh925568(v=vs.110).aspx#net_b – Aaron

0

Sie C# Compiler und die gedruckte Version des .NET installiert überprüfen:

@echo off 

for /r "%SystemRoot%\Microsoft.NET\Framework\" %%# in ("*csc.exe") do (
    set "l=" 
    for /f "skip=1 tokens=2 delims=k" %%$ in ('"%%# #"') do (
     if not defined l (
      echo Installed: %%$ 
      set l=%%$ 
     ) 
    ) 
) 

echo latest installed .NET %l% 

die csc.exe nicht haben ein -version Schalter, aber es druckt die .net-Version in seinem Logo. Sie können auch versuchen mit msbuild.exe aber .net framework 1. * hat keine msbuild.