Is there a command line command for verifying what version of .NET is installed
我有一组脚本用于执行脚本安装。您可以在任何服务器2008计算机上使用这些脚本。但是,我需要检查是否已经使用DOS批处理文件安装了.NET 3.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安装
您可以检查已安装的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% |
这对我很有用:
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 |
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