是否有命令行命令来验证安装的.NET版本

问题描述 投票:0回答:10

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

我知道我可以检查

C:\WINDOWS\Microsoft.NET\Framework\v3.5
中的文件是否存在,但如果有更可靠的东西就更好了。

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

谢谢

.net windows batch-file cmd
10个回答
76
投票

既然您说您想知道它是否实际安装,我认为最好的方法(除了运行特定于版本的代码)是检查名为“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\

这也恰好是“微软推荐”官方方法

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

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% 确定的唯一方法是实际运行一个针对您的框架版本编译的简单控制台应用程序。就我个人而言,我认为这是不必要的,并且相信注册表方法就可以了。

最后,您可以设置一个可从您的服务器访问的 Intranet 测试站点,并嗅探用户代理以确定 .NET 版本。但这当然不是批处理文件解决方案。另请参阅此处文档


18
投票

您的意思是像下面这样的 DOS 命令将完成显示已安装的 .NET 框架的工作:

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

随后可能会显示以下内容:

Version
4.0.30319

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


15
投票

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

我唯一要补充的是以这种方式找到目录以获得最大的灵活性:

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

5
投票

您可以自己编写一个小控制台应用程序并使用 System.Environment.Version 来查找版本。 Scott Hanselman 发表了一篇关于它的博客文章

或者在注册表中查找已安装的版本。 HKLM\Software\Microsoft\NETFramework 设置\NDP


4
投票

如果您要运行一个小型控制台应用程序,您也可以从 .NET SDK 安装

clrver.exe
。我不认为你能比这更干净。这不是我的答案(但我碰巧同意),我在here找到了它。


0
投票

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
投票

这对我有用:

@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
将错误重定向到vapor。


0
投票

您可以检查已安装的 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
投票

一些情况,您可能不需要为了其本身而了解,而是为了依赖应用程序。如果是这种情况,应用程序本身可能会告诉您。

我需要最新版本的

.NET
才能安装最新版本的 SSMS。如果
.NET
未安装,或者太旧,SSMS 安装程序将退出并出现错误。您可以使用错误代码来采取补救措施。

经典的方法是这样的:

ssmsInstaller.exe

if errorlevel 1 goto installDotNet
echo SSMS Installed etc
exit

:installDotNet
installDotNet.exe
echo time to reboot

当然,我已经缩写了名称,因为这不是重点。重要的是

ssmsInstaller
应完成且没有错误 (
errorlevel 0
)。如果失败,误差将不为零。

当然,失败可能还有其他原因,但如果您确定

.NET
是问题所在,那么这可能会起作用。

另一种逻辑流程是这样的:

ssmsInstaller.exe

if %errorlevel% ne 0 (
    installDotNet.exe
    echo time to reboot
)

echo SSMS Installed etc

更紧凑的版本是:

ssmsInstaller.exe || installDotNet.exe && echo time to reboot

语法

a || b
表示仅在
b
不成功
时才运行 a。语法
b && c
表示仅在
c
成功
时才运行 b


-2
投票
© www.soinside.com 2019 - 2024. All rights reserved.