VB.NET中的WScript?

时间:2012-03-06 19:07:54

标签: vb.net vbscript wsh

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

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

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

1 个答案:

答案 0 :(得分:11)

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

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


如果出于某种原因,您仍然希望使用COM对象,则需要向项目添加适当的COM库引用,以便将这些对象提供给您的应用程序。在WScript.Shell的情况下,它是%WinDir%\ System32 \ wshom.ocx (或64位Windows上的%WinDir%\ SysWOW64 \ wshom.ocx ) 。然后你可以编写这样的代码:

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,所以这段代码可能很难看;随时改进。