我有一组用于执行脚本安装的脚本.您可以在任何服务器2008计算机上使用这些脚本.但是,我需要使用dos批处理文件检查是否已安装.NET 3.5(在脚本运行之前).那可能吗?
我知道我可以检查文件是否C:\WINDOWS\Microsoft.NET\Framework\v3.5
存在,但是让某些东西更可靠会更好.
我想检查它是否实际安装,而不仅仅是目录/文件是否存在.
谢谢
既然你说你想知道它是否实际安装,我认为最好的方法(缺少运行版本特定的代码),就是检查令人放心的名为"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版本.但这当然不是批处理文件解决方案.另见doc.
你的意思是DOS命令如下所示将显示已安装的.NET框架:
wmic /namespace:\\root\cimv2 path win32_product where "name like '%%.NET%%'" get version
然后可以显示以下内容:
Version 4.0.30319
一旦掌握了它,WMIC就非常有用,比根据你想要实现的目标在脚本中编码WMI要容易得多.
不幸的是,最好的方法是检查该目录.我不确定你的意思,但"实际安装"因为.NET 3.5使用与.NET 3.0和.NET 2.0相同的CLR所以所有新功能都包含在该目录中的新程序集中.基本上,如果目录在那里,则安装3.5.
我唯一想补充的是以这种方式找到dir以获得最大的灵活性:
%windir%\Microsoft.NET\Framework\v3.5
您可以自己编写一个控制台应用程序并使用System.Environment.Version来查找版本.Scott Hanselman发表了一篇关于它的博文.
或者在注册表中查找已安装的版本.HKLM\Software\Microsoft\NETFramework Setup\NDP