这是我程序中的一小段代码:
WSHShell = WScript.CreateObject("WScript.Shell")
但由于某种原因,未声明“WScript”。我知道这段代码在VBScript中有效,但我正试图让它与vb.net一起工作。怎么回事?
答案 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%"))
或者,您可以使用
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,所以这段代码可能很难看;随时改进。