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
我有一个启动应用程序的 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