65

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

我知道我可以检查一个文件是否C:\WINDOWS\Microsoft.NET\Framework\v3.5存在,但如果有一些更可靠的东西会很好。

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

谢谢

4

9 回答 9

75

既然您说您想知道它是否实际安装,我认为最好的方法(缺少运行版本特定代码)是检查令人放心的名为“安装”的注册表项。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 版本。但这当然不是批处理文件解决方案。另请参阅此处的文档

于 2011-07-29T09:51:04.323 回答
18

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

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

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

Version
4.0.30319

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

于 2011-03-22T03:55:36.290 回答
15

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

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

%windir%\Microsoft.NET\Framework\v3.5
于 2009-01-29T19:15:40.140 回答
5

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

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

于 2009-01-29T19:26:42.567 回答
4

如果您要运行一个小控制台应用程序,您也可以clrver.exe从 .NET SDK 安装。我认为没有比这更干净的了。这不是我的答案(但我碰巧同意),我在这里找到了。

于 2010-04-28T00:20:30.900 回答
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.
于 2014-01-26T17:56:55.503 回答
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错误重定向到蒸汽。

于 2015-09-24T18:01:16.537 回答
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。

于 2017-01-07T12:28:56.447 回答
-2

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

于 2015-10-15T18:19:55.950 回答