Как диалоговое окно "Выполнить" узнает, где находятся приложения?
Как опытный пользователь, я часто использую диалог Run.
Я могу понять, почему следующие команды работают, так как они находятся в PATH
переменная окружения.
mspaint
diskmgmt.msc
explorer
Эти команды также работают в CMD.
Команды ниже работают в рабочем режиме, но их нет в PATH
и они не работают в CMD.
firefox
winword
iexplore
Как Run узнает, где находятся эти файлы?
3 ответа
Когда вы выполняете команду из диалогового окна "Выполнить", система просматривает 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 правильно указывает на то, что дополнительные ключи, которые ищет диалог 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\something.txt" для запуска JVM с соответствующими параметрами и запуска / повторного использования jEdit.
Насколько я вижу, имя ключа должно заканчиваться на ".exe", поэтому для создания псевдонима "abc" вы создаете ключ "abc.exe", даже если он не указывает на файл ".exe".,
В командной строке есть переменная окружения PATH или%PATH%. Он содержит ряд мест для поиска.