VBScript检查.NET 2.0是否已安装

3

您能分享一个VB脚本,用于检查计算机上是否安装了.NET 2.0吗?

我在网上搜索了一下,大多数“检查是否安装了.NET”的应用程序只是查找特定的注册表键,忽略了安装可能已损坏的事实。

基本上,我正在寻找一个脚本,它尝试创建一个.NET对象(应该可以创建-例如System.Object),如果失败了-.NET要么未安装,要么安装已损坏(因此与根本没有安装.NET一样)。


你需要用VBScript做这件事情有什么特别的原因吗?你想要达到什么目的?这是你想要作为.NET应用程序安装程序的一部分运行的东西吗? - Cody Gray
是的,我在VBScript上实现了一个xcopy部署/启动器系统。在启动应用程序之前,我想检查.NET是否存在且未损坏。 - Andrew
3个回答

2
检测特定版本的.NET Framework 是否已安装的官方方法是通过检查相应注册表键是否存在。在此情况下,您要查找的是这个键:
HKLM\SOFTWARE\Microsoft\.NETFramework\Policy\v2.0
如果存在 REG_SZ 值“50727”,则可以确定已安装框架的 2.0 版本。
那么,如何在 VBScript 中执行此操作呢?以下是一个小脚本,可以实现此功能:
Option Explicit
Dim oShell
Dim value

''#If the key isn't there when we try to read it, an error will be generated
''# that we will later test for, so we want to automatically resume execution.
On Error Resume Next

''#Try reading the registry value
Set oShell = CreateObject("WScript.Shell")
value = oShell.RegRead("HKLM\SOFTWARE\Microsoft\.NETFramework\Policy\v2.0\50727")

''#Catch the error
If Err.Number = 0 Then
    ''#Error code 0 indicates success
    MsgBox("Version 2.0 of the .NET Framework is installed.")
Else
    ''#Any other error code indicates failure
    MsgBox("Version 2.0 of the .NET Framework is NOT installed.")
End If

如果您想将此检查集成到现有的VBScript中,建议您将其转换为一个函数,并返回一个布尔值(而不是显示消息框),具体取决于.NET Framework的正确版本是否已安装。然后,您可以从脚本内部调用此函数。注意:如果您选择此路线,请确保在函数结束时将错误处理关闭(或至少返回更合适的样式)。除非您明确地在代码中处理错误,否则不要使用On Error Resume Next。请保留HTML标记。
On Error Goto 0    ''#Turn "On Error Resume Next" back off!

编辑:如果您确定要通过实例化一个常见框架对象来确定.NET安装的有效性,则该脚本与之前非常相似。 (实际上,它甚至比访问注册表更简单。)与之前一样,使用CreateObject,但这次是用于实例化基类System.Object的对象:

On Error Resume Next

Dim testObj
Set testObj = CreateObject("System.Object")

If Err.Number = 0 Then
    MsgBox("Success")
Else
    MsgBox("Failure")
End If

然而,这并不能告诉您安装了哪个版本的.NET Framework。此测试适用于任何版本,包括1.1、2.0、4.0、未来版本等。您的问题似乎要求使用2.0版本,如果是这样,您真的应该考虑使用第一种选项。
我的经验是这种“损坏”的Framework安装非常罕见,如果您像我听说的那样经常遇到它们,您可能应该考虑将正确的Framework版本作为例行安装。我不相信能够实例化类型System.Object的对象是否真的比检查注册表键或目录的存在更能说明Framework安装的有效性。
这已在没有安装.NET Framework的干净Windows XP虚拟机上进行了测试。它会正确地报告失败。在其他安装了.NET Framework的计算机上,它会正确地报告成功。

我知道官方的 MS 方法,但我更愿意编写一个脚本来尝试创建“可创建”的 .NET 对象作为测试。最近,我遇到了许多支持事件,当时 .NET 安装已损坏(尽管所有注册表键都存在)。 - Andrew
@Andrew:我更新了我的答案,包括你要找的测试。然而,除了这种方法不是官方做事的方式之外,我还有一些疑虑。 - Cody Gray
1
VBscript中的"On Error"语句在函数结束时自动结束。因此,在函数末尾不需要执行"On Error Goto 0"来恢复其行为。 - mheyman

2
这同样有效,并且是 MSDN 网站上推荐测试 .net 安装的方法的精确副本。
网址 - http://support.microsoft.com/kb/318785/en-us
''official MSDN verison 2.0
value = oShell.RegRead("HKEY_LOCAL_MACHINE\Software\Microsoft\NET Framework Setup\NDP\v2.0.50727\Version")  
''#Catch the error 
If Err.Number = 0 Then     
    ''#Error code 0 indicates success        
    MsgBox("Version 2.0 of the official .NET Framework is installed.") 
Else     
''#Any other error code indicates failure     
    MsgBox("Version 2.0 of the official .NET Framework is NOT installed.") 
End If 

0

要确定.NET FRAMEWORK 2是否正确安装,我建议编写一个脚本来查找“两个事项”:

  1. 检查RegKey是否仍然存在,就像'Cody Gray'所示。

  2. 我会编写一段代码来检查位于Windows目录中的NET FRAMEWORK 2是否小于例如75 MB(通常约为82-87 MB),如果是,则未安装或已损坏。

将这两个代码组合在一起,您将能够知道NET FRAMEWORK 2是否已正确安装在用户的计算机上。


一个注册表键和一个大小合适的文件夹并不能构成正确安装的框架。如果出现损坏,很难(甚至不可能)检测到。 - Emond

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接