Объект 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 ну, так что этот код может быть уродливым; не стесняйтесь улучшать.