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

WScript.Shell vs cmd.exe - WorkingDir differences?

我有一个启动应用程序的 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 找不到它?

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

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

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

ShellExecute (or ShellExecuteEx) also checks注册表项的内容

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

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

start appli.exe