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


72

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

我能理解以下命令为何起作用,因为它们在PATH环境变量中。

mspaint
diskmgmt.msc
explorer

这些命令也可以在CMD中使用。

以下命令可以在运行中运行,但它们不在中PATH,并且在CMD中不起作用。

firefox
winword
iexplore

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

Answers:


90

在“运行”对话框中执行命令时,系统将在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。


5
嗯,这可能可以解释为什么您不能将多个具有相同名称的程序与带有选项的打开一起使用。设计不良。
curiousdannii

2
是的,差不多。但是,“打开对话框”读取的是HKCR\ApplicationsRegisteredApplications
w32sh


6
您当然可以使用start搜索应用程序路径的内置函数。
尼尔

1
这是很好的记录在这里。我还解释了cmd 在这里如何进行搜索-这是一种与Win32 API不同的特殊情况。
鲍勃,

4

w32sh的答案正确指出“运行”对话框搜索的其他键在这里:

  • HKEY_CURRENT_USER \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ App Paths \
  • HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ App路径\

这些路径都有官方文档

关于这些键的一个重要事实是,键的名称(例如“ 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并启动/重用jEdit

据我所知,密钥名称必须以“ .exe”结尾,因此要创建别名“ abc”,就必须创建一个密钥“ abc.exe”,即使它没有指向“ .exe”文件也是如此。 。


如果我在可执行文件名之后使用其他开关,则无法在此处使用。
w32sh

@ w32sh嗯,我认为在Win 10中已更改:(
IMSoP '16

-1

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.