Объект WScript в VB.NET?

это снипет кода из моей программы:

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

но по какой-то причине "WScript" не объявлен. Я знаю, что этот код работает в VBScript, но я пытаюсь заставить его работать с vb.net - ... Что случилось?

1 ответов


на WScript объект специфичен для узла сценариев Windows и не существует в .NET Framework.

на самом деле, все WScript.Shell функциональность объекта доступна в классах .NET Framework. Поэтому, если вы переносите код VBScript на VB.NET, вы должны переписать его с помощью классов .NET, а не с помощью com-объектов Windows Script Host.


Если по какой-то причине вы все равно предпочитаете использовать 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

* I не знаю. VB.NET ну, так что этот код может быть уродливым; не стесняйтесь улучшать.