Как диалоговое окно «Выполнить» узнает, где находятся приложения?

72

Как опытный пользователь, я часто использую диалог Run.

Я могу понять, почему следующие команды работают, так как они находятся в PATHпеременной окружения.

mspaint
diskmgmt.msc
explorer

Эти команды также работают в CMD.

Приведенные ниже команды работают в рабочем режиме, но их нет в PATHи они не работают в CMD.

firefox
winword
iexplore

Как Run узнает, где находятся эти файлы?

mt025
источник

Ответы:

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) Значение data имеет полный путь к исполняемому файлу.

Если он не найден, он просматривает каждую папку, включенную в PATH.

Принимая во внимание, что командная строка не ссылается на эти ключи реестра. Он только ищет ПУТЬ.

w32sh
источник
5
Ах, это, вероятно, объясняет, почему вы не можете иметь несколько программ с одинаковым именем, работающих с опциями. Плохой дизайн.
curiousdannii
2
Да почти. Но Open с диалоговым окном читает HKCR\ApplicationsиRegisteredApplications
w32sh
4
Microsoft представила видео об этом: channel9.msdn.com/Shows/Defrag-Tools/Defrag-Tools-133-App-Paths
magicandre1981
6
Конечно, вы можете использовать startвстроенную функцию поиска путей к приложениям.
Нил
1
Это довольно хорошо задокументировано здесь . Я также объяснил, как cmd выполняет поиск здесь - это особый случай, отличный от Win32 API.
Боб
4

Ответ w32sh правильно указывает на то, что дополнительные ключи, которые ищет диалог Run, находятся здесь:

  • HKEY_CURRENT_USER \ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ \ Microsoft \ Windows \ CurrentVersion \ Пути к приложениям \
  • HKEY_LOCAL_MACHINE \ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ \ 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 \thing.txt» для запуска JVM с соответствующими параметрами и запуска / повторного использования jEdit .

Насколько я вижу, имя ключа должно заканчиваться на «.exe», поэтому для создания псевдонима «abc» вы создаете ключ «abc.exe», даже если он не указывает на файл «.exe». ,

IMSoP
источник
Это не сработает, если я использую дополнительные ключи после имени исполняемого файла.
w32sh
@ w32sh Хм, я думаю, что это изменилось в Win 10 :(
IMSoP
-1

В командной строке есть переменная окружения PATH или% PATH%. Он содержит ряд мест для поиска.

Garhoogin
источник