it-swarm.com.ru

Есть ли команда командной строки для проверки, какая версия .NET установлена

У меня есть набор сценариев для установки по сценарию. Вы можете использовать скрипты на любом компьютере с сервером 2008. Однако мне нужно проверить, установлен ли .NET 3.5 (до запуска сценариев), используя пакетный файл dos. Это возможно? 

Я знаю, что могу проверить, существует ли файл в C:\WINDOWS\Microsoft.NET\Framework\v3.5, но было бы неплохо иметь что-то более надежное. 

Я хотел бы проверить, установлен ли он на самом деле, а не только существует ли файл/каталог.

Спасибо

61
Travis

К сожалению, лучший способ - проверить этот каталог. Я не уверен, что вы имеете в виду, но «фактически установлен», поскольку .NET 3.5 использует тот же CLR, что и .NET 3.0 и .NET 2.0, поэтому все новые функциональные возможности заключены в новые сборки, которые находятся в этом каталоге. В основном, если каталог там, то 3.5 установлен.

Единственное, что я хотел бы добавить, так это найти каталог для максимальной гибкости:

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

Поскольку вы сказали, что хотите знать, установлен ли он на самом деле, я думаю, что лучший способ (за исключением запуска кода, специфичного для версии), - это проверить убедительно названный раздел реестра «Install». 0x1 означает да:

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\

Это также бывает "Microsoft Recommended" официальный метод .

WMI - еще одна возможность, но она кажется непрактичной (медленно? Занимает 2 минуты на моем C2D, SSD). Может быть, это лучше работает на вашем сервере:

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

Кроме этих, я думаю, что единственный способ быть на 100% уверенным - это запустить простое консольное приложение, скомпилированное для вашей версии платформы. Лично я считаю это ненужным и доверяю методу реестра просто отлично.

Наконец, вы можете настроить тестовый сайт интрасети, доступный с вашего сервера и позволяющий пользовательскому агенту определить версии .NET. Но это, конечно, не пакетное решение. Также см. здесь документ .

74
Amit Naidu

Вы имеете в виду, что команда DOS, такая как приведенная ниже, будет выполнять работу, отображая установленные платформы .NET: 

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

Затем может отображаться следующее:

Version
4.0.30319

WMIC весьма полезен, когда вы освоите его, гораздо проще, чем кодировать WMI в сценариях в зависимости от того, чего вы хотите достичь. 

16
MacG

Вы можете написать себе небольшое консольное приложение и использовать System.Environment.Version, чтобы узнать версию. Скотт Хансельман дает сообщение в блоге об этом.

Или поищите в реестре установленные версии. HKLM\Программное обеспечение\Microsoft\Настройка NETFramework\NDP

5
ajma

Если вы собираетесь запустить небольшое консольное приложение, вы можете также установить clrver.exe из .NET SDK. Я не думаю, что вы можете стать чище, чем это. Это не мой ответ (но я согласен), я нашел его здесь .

4
user287466

вы можете проверить установленные компиляторы c # и печатную версию .net:

@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%

csc.exe не имеет переключателя -version, но печатает версию .net в своем логотипе. Вы также можете попробовать с msbuild.exe, но .net Framework 1. * не имеет msbuild.

0
npocmaka

REM Поиск файла CONFIG, если он не завершается, то у пользователя нет .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

Это работает для меня:

@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 

Код 2^>nul перенаправляет ошибки на пары.

0
JRobParsons