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

3286
mt025

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

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

mspaint diskmgmt.msc explorer 

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

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

firefox winword iexplore 

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

69

3 ответа на вопрос

89
Win32Guy

Когда вы выполняете команду из диалогового окна «Выполнить», система просматривает 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.

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

Ах, это, вероятно, объясняет, почему не может работать несколько программ с одинаковым именем, открытых с опциями. Плохой дизайн. curiousdannii 7 лет назад 5
Да почти. Но Open с диалогом читает из `HKCR \ Applications` и` RegisteredApplications` Win32Guy 7 лет назад 2
Microsoft предоставила видео об этом: https://channel9.msdn.com/Shows/Defrag-Tools/Defrag-Tools-133-App-Paths magicandre1981 7 лет назад 4
Конечно, вы можете использовать встроенную функцию `start`, которая выполняет поиск путей приложения. Neil 7 лет назад 6
Это довольно хорошо [задокументировано здесь] (http://msdn.microsoft.com/en-us/library/windows/desktop/ee872121%28v=vs.85%29.aspx). Я также объяснил, как cmd выполняет поиск [здесь] (http://superuser.com/a/494548/117590) - это особый случай, отличный от Win32 API. Bob 7 лет назад 1
@curiousdannii вы можете уточнить? В Windows может быть запущено несколько процессов с одинаковым именем phuclv 7 лет назад 0
@ LưuVĩnhPhúc Вы не можете иметь несколько ассоциаций файлов с одним и тем же именем исполняемого файла. Или, по крайней мере, я не понял, как curiousdannii 7 лет назад 0
@curiousdannii: невозможно с помощью пользовательского интерфейса, но вы можете сделать это, отредактировав реестр. Win32Guy 7 лет назад 0
@ w32sh Раздражает то, что даже если вы выбираете приложение, используя селектор файлов, который дает вам пользовательский интерфейс, оно будет использовать существующее приложение, если у него такое же имя файла. curiousdannii 7 лет назад 0
Правильный. Но вы можете сделать это с помощью regedit.exe. Если у вас есть конкретные требования, пожалуйста, опубликуйте новый вопрос. Win32Guy 7 лет назад 0
@curiousdannii почему бы и нет? Например, MS Word связан с .doc, .docx, .docm, .dot, .dotx, .dotm ... phuclv 7 лет назад 0
@ LưuVĩnhPhúc Я имею в виду, что вы не можете связать .doc с двумя программами в двух разных каталогах, если имя файла для обоих - word.exe (без использования regedit, то есть.) curiousdannii 7 лет назад 0
@ w32sh Я не хотел расстраивать это или получать поддержку для моих проблем - я только первоначально прокомментировал, потому что я думал, что ваш пост был интересным, и он научил меня чему-то новому: что Windows иногда нравится работать с именами файлов без пути. curiousdannii 7 лет назад 0
4
IMSoP

Ответ 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».,

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

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