it-swarm.com.de

Gibt es einen Befehlszeilenbefehl zum Überprüfen der installierten .NET-Version?

Ich habe Skripte für Skriptinstallationen. Sie können die Skripts auf jedem Server 2008-Computer verwenden. Ich muss jedoch überprüfen, ob .NET 3.5 (bevor die Skripts ausgeführt werden) mit einer DOS-Stapelverarbeitungsdatei installiert wurde. Ist das möglich? 

Ich weiß, dass ich überprüfen kann, ob eine Datei im C:\WINDOWS\Microsoft.NET\Framework\v3.5 vorhanden ist, aber es wäre schön, etwas zuverlässiger zu haben. 

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

Vielen Dank

61
Travis

Leider ist es am besten, nach diesem Verzeichnis zu suchen. Ich bin nicht sicher, was Sie meinen, aber "tatsächlich installiert", da .NET 3.5 dieselbe CLR wie .NET 3.0 und .NET 2.0 verwendet, sodass alle neuen Funktionen in neuen Assemblys eingeschlossen werden, die in diesem Verzeichnis leben. Wenn das Verzeichnis vorhanden ist, wird 3.5 installiert.

Ich würde nur hinzufügen, das Verzeichnis so zu finden, dass maximale Flexibilität gegeben ist:

%windir%\Microsoft.NET\Framework\v3.5
14
Andrew Hare

Da Sie sagten, Sie möchten wissen, ob es tatsächlich installiert ist, denke ich, ist der beste Weg (um Version spezifischer Code auszuführen), den 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 ist auch die "Microsoft Recommended" offizielle Methode .

WMI ist eine andere Möglichkeit, scheint jedoch unpraktisch (Slow? 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 von diesen, denke ich, ist der einzige Weg, um 100% sicher zu sein, die Ausführung einer einfachen Konsolenanwendung, die für Ihre Framework-Version kompiliert wurde. Ich persönlich halte das für unnötig und vertraue der Registrierungsmethode gut.

Schließlich können Sie eine Intranet-Test-Site einrichten, die von Ihrem Server aus erreichbar ist und den Benutzeragenten zur Ermittlung der .NET-Versionen aufspürt. Aber das ist natürlich keine Batch-File-Lösung. Siehe auch doc hier .

74
Amit Naidu

Sie meinen, ein DOS-Befehl wie der folgende würde die installierten .NET-Frameworks ausführen: 

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

Dann kann folgendes angezeigt werden:

Version
4.0.30319

WMIC ist sehr nützlich, wenn Sie es beherrschen, viel einfacher als WMI in Skripts zu programmieren, je nachdem, was Sie erreichen möchten. 

16
MacG

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

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

5
ajma

Wenn Sie eine kleine Konsolen-App ausführen, können Sie auch clrver.exe vom .NET SDK installieren. Ich glaube nicht, dass du sauberer werden kannst. Dies ist nicht meine Antwort (aber ich stimme zu), ich fand sie hier .

4
user287466

sie können installierte c # -Compiler und die gedruckte Version von .net ü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%

der csc.exe hat keinen -version-Schalter, druckt jedoch die .net-Version in sein Logo. Sie können es auch mit msbuild.exe versuchen, aber das .net Framework 1. * hat keine msbuild.

0
npocmaka

REM Suchen Sie nach der CONFIG-Datei. Wenn dies nicht beendet wird, verfügt der Benutzer nicht über das .Net Framework 2.0 `

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
user3237950

Das funktioniert für mich:

@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 

Der 2^>nul leitet Fehler an Dampf weiter.

0
JRobParsons