.net - vbscript 检查是否安装了.net 2.0

标签 .net vbscript installation

你能分享一个vb脚本来检查计算机上是否安装了.NET 2.0吗?

我在网上进行了搜索,大多数此类“检查 .net 是否已安装”应用程序只是查找特定的注册表项,从而忽略了安装可能已损坏的事实。

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

最佳答案

检测是否安装了特定版本的 .NET Framework 的官方方法是检查相应的注册表项是否存在。在本例中,您正在寻找此 key :

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 中,我建议您将其转换为返回 Boolean 值的函数(而不是显示消息框),具体取决于是否安装了正确版本的 .NET Framework。然后您可以从脚本中调用此函数。 注意:如果您选择这条路线,请确保在函数结束时关闭错误处理(或至少返回到更合适的样式)!您不希望使用On Error Resume Next,除非您稍后在代码中显式处理错误。

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、 future 版本等。您的问题似乎说明了对 2.0 版本的要求,如果是这样,您确实应该考虑使用第一个选项。

我的经验是,这种“损坏”的框架安装极其罕见,如果您像我相信的那样频繁地看到它们,您可能会考虑仅安装正确版本的框架作为当然。我不相信能够实例化 System.Object 类型的对象实际上是对框架安装有效性的“真实”测试,而不是检查注册表项或目录是否存在.

现在已经过测试,可以在未安装 .NET Framework 的干净 Windows XP 虚拟机上运行。它正确报告故障。在安装了 .NET Framework 的其他计算机上,它可以正确报告成功。

关于.net - vbscript 检查是否安装了.net 2.0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4394607/

相关文章:

android - Android Studio补丁安装方法

c# - 如何拆分列可能包含逗号的csv

javascript - 用js或vbs触发点击href按钮

php - 如何在 linux ubuntu 的 php 7 中启用 GD 库?

windows - 如何在启动时以管理员身份运行脚本

c# - 如何从 VBScript 调用 C# DLL 函数

linux - ${path} 如何工作,在本教程中

.net - 使用左键单击 : Rate of Scroll is faster than Mouse (. NET 平移图像)

c# - 编码为 ASCII 和 UTF8 的字符串长度不同!

c# - 将 DataGridView 导出到 HTML 页面