为什么我在 objShell 上收到 "necessary object" 错误?

Why do I get a "necessary object" error on objShell?

我不知道为什么在此 VBS 代码的 Set objShell = 语句中出现错误(它在 HTML 中)。我正在为名为 Doom 的游戏开发 .HTA 启动器,此 VBScript 用于 select 游戏并使用一些参数启动它。

Dim pwad, warp, skill, execDoom, execPwad, execWarp, execSkill, rep, fso, file, OpFScript, WScript, objShell
Set objShell = WScript.CreateObject("WScript.Shell")
Set pwad = document.GetElementById("inpFILE")
Set warp = document.GetElementById("inpMAP")
Set skill = document.GetElementById("inpSKILL")

Set fso = CreateObject("Scripting.FileSystemObject")
Set file = fso.OpenTextFile("C:\ZDLRemastered\launcher\ScriptOpFile.txt", 1)
OpFScript = file.ReadAll

Function GetFileDlgEx(sIniDir,sFilter,sTitle) 
    Set oDlg = CreateObject("WScript.Shell").Exec("mshta.exe & OpFScript")
    oDlg.StdIn.Write "var iniDir='" & sIniDir & "';var filter='" & sFilter & "';var title='" & sTitle & "';" 
    GetFileDlgEx = oDlg.StdOut.ReadAll 
End Function

sFilter = "Doom Archive (*.wad)|*.wad|"  
sTitle = "Select a Doom IWAD"
rep = GetFileDlgEx(Replace(sIniDir,"\","\"),sFilter,sTitle)

execDoom = "C:\ZDLRemastered\gzdoom\gzdoom.exe -config C:\ZDLRemastered\gzdoom\gzconfig.ini -iwad "
execPwad = " -file "
execWarp = " -warp "
execSkill = " -skill "
objShell.Run execDoom & Chr(34) & rep & Chr(34) & execPwad & Chr(34) & pwad & Chr(34) & execWarp & Chr(34) & warp & Chr(34) & execSkill & Chr(34) & skill & Chr(34)

这是错误:

necessary object: " -

HTA 运行 在与常规 VBScript 不同的引擎中(mshta.exe 对比 wscript.exe/cscript.exe)。 HTA 引擎不提供内在的 WScript 对象,因此 WScript.CreateObject()WScript.Sleep()WScript.Quit() 将不起作用。

虽然创建对象不需要该内部对象,因为 VBScript 也有一个全局函数 CreateObject()(即 not the same as WScript.CreateObject())。

改变这个:

Set objShell = WScript.CreateObject("WScript.Shell")

进入这个:

Set objShell = CreateObject("WScript.Shell")

问题就会消失。