Есть ли команда командной строки для проверки того, какая версия .NET установлена - PullRequest
62 голосов
/ 29 января 2009

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

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

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

Спасибо

Ответы [ 9 ]

74 голосов
/ 29 июля 2011

Поскольку вы сказали, что хотите знать, установлен ли он на самом деле, я думаю, что лучший способ (если не использовать код, специфичный для версии), - это проверять ключ реестра "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 .

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. Но это, конечно, не пакетное решение. Также см. документ здесь .

17 голосов
/ 22 марта 2011

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

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

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

Version
4.0.30319

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

14 голосов
/ 29 января 2009

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

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

%windir%\Microsoft.NET\Framework\v3.5
5 голосов
/ 29 января 2009

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

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

4 голосов
/ 28 апреля 2010

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

0 голосов
/ 07 января 2017

Вы можете проверить установленные компиляторы 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 голосов
/ 15 октября 2015

Вы можете взглянуть на эту страницу для .NET 4: http://www.itninja.com/question/batch-script-to-check-and-install-dotnet4-0

0 голосов
/ 24 сентября 2015

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

@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 голосов
/ 26 января 2014

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.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...