【问题标题】:WScript in VB.NET?VB.NET 中的 WScript?
【发布时间】:2012-03-06 19:07:54
【问题描述】:

这是我程序中的一段代码:

WSHShell = WScript.CreateObject("WScript.Shell")

但由于某种原因,没有声明“WScript”。我知道这段代码在 VBScript 中工作,但我正试图让它与 vb.net 一起工作。怎么了?

【问题讨论】:

  • @volody 这是一篇有趣的帖子,但我仍然想知道如何使我的代码适应 vb.net
  • 您可以将脚本作为单独的进程运行
  • 正如我在 Eric Lippert 的博客中提到的,.Net 中不需要 WScript。您应该重写代码以使用本机类。

标签: vb.net vbscript wsh


【解决方案1】:

WScript 对象特定于 Windows 脚本宿主,在 .NET Framework 中不存在。

实际上,所有WScript.Shell 对象功能都在 .NET Framework 类中可用。因此,如果您要将 VBScript 代码移植到 VB.NET,您应该使用 .NET 类而不是使用 Windows Script Host COM 对象来重写它。


如果出于某种原因,您更喜欢使用 COM 对象,则需要将适当的 COM 库引用添加到您的项目中,以使这些对象可用于您的应用程序。对于WScript.Shell,它是 %WinDir%\System32\wshom.ocx(或 %WinDir%\SysWOW64\wshom.ocx 在 64 位 Windows 上)。然后你可以这样写代码:

Imports IWshRuntimeLibrary
....
Dim shell As WshShell = New WshShell
MsgBox(shell.ExpandEnvironmentStrings("%windir%"))


或者,您可以使用

创建 COM 对象的实例
Activator.CreateInstance(Type.GetTypeFromProgID(ProgID))

然后使用后期绑定与他们一起工作。像这样,例如*:

Imports System.Reflection
Imports System.Runtime.InteropServices
...

Dim shell As Object = Nothing

Dim wshtype As Type = Type.GetTypeFromProgID("WScript.Shell")
If Not wshtype Is Nothing Then
    shell = Activator.CreateInstance(wshtype)
End If

If Not shell Is Nothing Then
    Dim str As String = CStr(wshtype.InvokeMember(
        "ExpandEnvironmentStrings",
        BindingFlags.InvokeMethod,
        Nothing,
        shell,
        {"%windir%"}
    ))
    MsgBox(str)

    ' Do something else

    Marshal.ReleaseComObject(shell)
End If

* 我不太了解VB.NET,所以这段代码可能很难看;随时改进。

【讨论】:

  • +1,但是你在底部提出的建议应该在顶部,不能错过!
猜你喜欢
  • 2015-04-28
  • 2011-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多