关于windows:是否有命令行命令用于验证安装的.NET版本

Is there a command line command for verifying what version of .NET is installed

我有一组脚本用于执行脚本安装。您可以在任何服务器2008计算机上使用这些脚本。但是,我需要检查是否已经使用DOS批处理文件安装了.NET 3.5(在脚本运行之前)。有可能吗?

我知道我可以检查C:\WINDOWS\Microsoft.NET\Framework\v3.5中的文件是否存在,但是如果有更可靠的文件就更好了。

我想检查它是否实际安装,而不仅仅是检查dir/文件是否存在。

谢谢


既然你说你想知道它是否真的安装了,我认为最好的方法(除了运行特定于版本的代码)是检查一个可靠的名为"安装"的注册表项。0x1表示"是":

1
2
3
4
5
6
C:\>reg query"HKLM\SOFTWARE\Microsoft
ET Framework Setup
DP\v3.5"| findstr Install

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

这也是"微软推荐"的官方方法。

WMI是另一种可能性,但似乎不切实际(慢?我的C2D和SSD需要2分钟)。也许它在您的服务器上工作得更好:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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版本。但这当然不是批处理文件解决方案。另请参阅此处的文档。


您的意思是像下面这样的DOS命令将执行显示已安装.NET框架的任务:

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

然后显示以下内容:

1
2
Version
4.0.30319

一旦掌握了使用它,wmic就非常有用了,这比根据您想要实现的目标在脚本中编写wmi要容易得多。


不幸的是,最好的方法是检查该目录。我不确定您的意思,但是.NET 3.5使用的"实际安装"与.NET 3.0和.NET 2.0相同的clr,因此所有新功能都包含在该目录中的新程序集中。基本上,如果目录存在,则安装3.5。

我唯一要补充的是,通过这种方式找到dir以获得最大的灵活性:

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


您可以编写一个小的控制台应用程序,并使用System.Environment.Version查找版本。斯科特·汉塞尔曼发表了一篇关于它的博客文章。

或者在注册表中查找已安装的版本。hklmsoftwaremicrosoftetframework安装程序dp


如果您要运行一个小的控制台应用程序,您也可以从.NET SDK安装clrver.exe。我觉得你再也洗不干净了。这不是我的答案(但我恰好同意),我在这里找到了它。


您可以检查已安装的C编译器和.NET的打印版本:

1
2
3
4
5
6
7
8
9
10
11
12
13
@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。


这对我很有用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
@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
ET Framework Setup
DP\%%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将错误重定向到vapor。


REM搜索配置文件,如果不退出,则用户没有.NET Framework 2.0`

1
2
3
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.

您可以查看.NET 4的此页面:http://www.itninja.com/question/batch-script-to-check-and-install-dotnet4-0