运行对话框如何知道应用程序在哪里?

运行对话框如何知道应用程序在哪里?

作为高级用户,我经常使用运行对话框。

我可以理解为什么以下命令有效,因为它们在PATH环境变量中。

mspaint
diskmgmt.msc
explorer

这些命令在 CMD 中也有效。

下面的命令在运行中有效,但在中无效PATH,并且在 CMD 中无效。

firefox
winword
iexplore

Run 如何知道这些文件在哪里?

答案1

当您从运行对话框执行命令时,系统会查看App Paths此处的注册表项:

HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths

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

例子

HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\filezilla.exe

(default)值数据具有可执行文件的完整路径。

如果未找到,它会查看 PATH 中包含的每个文件夹。

而命令提示符不会引用这些注册表项。它只搜索 PATH。

答案2

w32sh 的回答正确指出运行对话框搜索的额外键在这里:

  • HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\应用程序路径\
  • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\应用程序路径\

这些路径的官方文档

关于这些键的一个重要事实是,键的名称(例如“filezilla.exe”)不必以任何方式与完整路径匹配。在 Windows 7 下,该值甚至可以是一个简单的命令行,类似于可以用作快捷方式的“目标”的内容。

例如,我曾经在我的注册表中有这个:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\jedit.exe]
@="\"C:\\WINDOWS\\system32\\javaw.exe\" -Xms24M -Xmx512M -jar \"C:\\Program Files\\jEdit\\jedit.jar\" -reuseview"

我似乎无法在 Windows 10 中完成这项工作,但你仍然可以指向任何文件,包括批处理文件,例如

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\jedit.exe]
@="C:\\Program Files\\jEdit\\run-jedit.bat"

这允许您键入“jedit”或“jedit C:\foo\bar\something.txt”以使用适当的选项运行 JVM 并启动/重用j编辑

据我所知,键名必须以“ .exe ”结尾,因此要创建“ abc ”的别名,您需要创建一个键“ abc.exe ”,即使它不是指向“ .exe ”文件。

答案3

命令行中有一个环境变量,称为 PATH 或 %PATH%。它包含一系列要搜索的位置。

相关内容