我有一组用于执行脚本安装的脚本。您可以在任何服务器2008计算机上使用这些脚本。但是,我需要使用dos批处理文件检查是否已安装.NET 3.5(在脚本运行之前)。那可能吗?
我知道我可以检查C:\WINDOWS\Microsoft.NET\Framework\v3.5
中的文件是否存在,但是让某些东西更可靠会更好。
我想检查它是否实际安装,而不仅仅是目录/文件是否存在。
由于
答案 0 :(得分:74)
既然你说你想知道它是否实际安装,我认为最好的方法(缺少运行版本特定的代码),就是检查令人放心的名为“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\
这也恰好是“微软推荐”official method。
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版本。但这当然不是批处理文件解决方案。另请参阅doc here。
答案 1 :(得分:16)
您的意思是如下所示的DOS命令将显示已安装的.NET框架的作业:
wmic /namespace:\\root\cimv2 path win32_product where "name like '%%.NET%%'" get version
然后可能会显示以下内容:
Version
4.0.30319
一旦掌握了它,WMIC就非常有用,比根据你想要实现的目标在脚本中编码WMI要容易得多。
答案 2 :(得分:14)
不幸的是,最好的方法是检查该目录。我不确定你的意思,但“实际安装”因为.NET 3.5使用与.NET 3.0和.NET 2.0相同的CLR所以所有新功能都包含在该目录中的新程序集中。基本上,如果目录在那里,则安装3.5。
我唯一想补充的是以这种方式找到dir以获得最大的灵活性:
%windir%\Microsoft.NET\Framework\v3.5
答案 3 :(得分:5)
您可以自己编写一个控制台应用程序并使用System.Environment.Version来查找版本。 Scott Hanselman给出了一个blog post。
或者在注册表中查找已安装的版本。 HKLM \ Software \ Microsoft \ NETFramework Setup \ NDP
答案 4 :(得分:4)
如果您要运行一个小型控制台应用程序,您也可以从.NET SDK安装clrver.exe
。我认为你不能比那更清洁。这不是我的答案(但我碰巧同意),我发现它here。
答案 5 :(得分: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.
答案 6 :(得分:0)
这对我有用:
nil
stringValue
将错误重定向到蒸汽。
答案 7 :(得分: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框架1. *没有msbuild。
答案 8 :(得分:-2)