WScript.Shell vs cmd.exe - WorkingDir差异?

时间:2015-11-12 05:54:24

标签: command-line cmd activex wsh working-directory

我有一个启动应用程序的ActiveX脚本。

var shell =  new ActiveXObject("WScript.Shell");
shell.run('appli.exe');

脚本运行正常。不过,如果我打开cmd.exe并输入appli.exe我收到错误,那是一个未知的命令。

Appli.exe放在C:\ Programs ...中,shell.CurrentDirectory给出C:\Users\ABC\Desktop。所以WorkingDir不能成为答案,为什么它在WScript.Shell中工作以及为什么它不在CMD中。

那么WScript.Shell如何找到Appli.exe的路径以及为什么cmd.exe无法找到它?

1 个答案:

答案 0 :(得分:2)

有几种方法可以在Windows中启动进程。 Run对象的WScript.Shell方法使用ShellExecute(或其ShellExecuteEx的变体)。此Windows API函数使用与ex不同的条件。 CreateProcess(从命令行直接调用应用程序使用)来定位应用程序。

两个API函数之间的区别之一是它们寻找应用程序的位置。

CreateProcess在当前活动目录,父进程当前活动目录,Windows系统目录和路径中包含的目录中进行搜索。

ShellExecute(或ShellExecuteExalso checks注册表项的内容

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths
HKEY_CLASSES_ROOT\Applications

您可以使用命令行中的start命令复制相同的行为,以启动您的应用程序。

start appli.exe