Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 为什么没有关于错误80070002的说明?_Windows_Vbscript - Fatal编程技术网

Windows 为什么没有关于错误80070002的说明?

Windows 为什么没有关于错误80070002的说明?,windows,vbscript,Windows,Vbscript,从某些Visual Basic脚本中,我意外地尝试启动一个不存在的程序: Dim WshShell Set WshShell = CreateObject("Wscript.Shell") On Error Resume Next WshShell.Run "incorrect" WScript.Echo "Error:" & vbTab & Err.Description & vbCrLf & _ "Code:" & vb

从某些Visual Basic脚本中,我意外地尝试启动一个不存在的程序:

Dim WshShell
Set WshShell = CreateObject("Wscript.Shell")
On Error Resume Next
WshShell.Run "incorrect"
WScript.Echo "Error:"  & vbTab & Err.Description & vbCrLf & _
             "Code:"   & vbTab & Hex(Err.Number)
这就产生了:

Error: Code: 80070002
这种行为上的差异是错误吗?还是我遗漏了什么?我在任何地方都找不到这篇文档。

我自己做了一些测试,它似乎只在
WshShell.Run()中出现。
例如,尝试以下代码,其工作方式相同,但请注意输出

Dim WshShell
设置WshShell=CreateObject(“WScript.Shell”)
出错时继续下一步
'此行将失败,因为没有类型88。
WshShell.LogEvent 88,“不正确”
WScript.Echo“错误:”&vbTab&Err.Description&vbCrLf&_
代码:“&vbTab&Hex(错误编号)
输出(错误时为
,下一步继续
):

我猜
WshShell.Run()
仅从
StdOut
读取,而不是
StdErr
当使用
On Error Resume Next
时,这是
WshShell.Run()所独有的,因为它正在尝试创建一个新进程

您可以进一步使用
WshShell.Exec()
进行测试,它提供对两个输出流的访问

Dim WshShell
设置WshShell=CreateObject(“WScript.Shell”)
出错时继续下一步
设置WshExec=WshShell.Exec(“不正确”)
WScript.Echo“错误:”&vbTab&Err.Description&vbCrLf&_
代码:“&vbTab&Hex(错误编号)
奇怪地检查了
WshExec.StdOut
WshExec.StdErr
,两者都不包含错误输出,但当使用下一次错误恢复时,该方法的行为与预期一致

所以无论如何都不是决定性的

但是作为国家

请记住,没有神秘感的脚本将是平淡乏味的


有用的链接

有趣的是,我刚刚用相同的结果测试了这一点,不确定为什么会发生,但会进行调查。我们找到了这篇旧文章。在文章的一半左右,我们谈到了行为上的差异,但从未完全解释过“如果您是那些注意到清单2中的Source和Description属性为空的人之一,但是在这里,它们返回值的错误相同,那么您可能现在正在挠头。我们也是。请记住,没有神秘感的脚本将是平淡乏味的。但是,既然你问了,Doctor Scripto就陷入了困境,推测这可能与清单2如何在不首先创建WMI服务对象的情况下直接实例化特定的Win32_打印机对象有关:“。不知道这有多大帮助。为什么
StdOut
StdErr
与此相关?没有进程启动,那么输出从何而来?@MicheldeRuiter根据
Run()
试图做的事情,这是一个猜测(我已经说过),在
Run()
将控制权传递给子系统以执行进程时(虚构或非虚构),完整的错误输出丢失,这只发生在
Run()上
方法,因此假设它与该子系统进程有关是相当安全的。@MicheldeRuiter您是否尝试了
WshShell.Exec()
等效示例? --------------------------- Windows Script Host --------------------------- Script: D:\Folder\MyScript.vbs Line: 3 Char: 1 Error: The system cannot find the file specified. Code: 80070002 Source: (null) --------------------------- OK --------------------------- Error: Invalid procedure call or argument Code: 5 Error: Invalid procedure call or argument Code: 5