Як діалогове вікно Запуск знає, де є програми?


72

Як користувач живлення, я часто використовую діалогове вікно Запуск.

Я можу зрозуміти, чому працюють наступні команди, оскільки вони знаходяться в PATHзмінній оточення.

mspaint
diskmgmt.msc
explorer

Ці команди також працюють у CMD.

Команди, що знаходяться нижче, працюють у бігу, але вони не в PATH, і вони не працюють у CMD.

firefox
winword
iexplore

Як Run знає, де ці файли?

Відповіді:


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.

Тоді як командний рядок не посилається на ці ключі реєстру. Він шукає лише ПАТ.


5
Ах, це, мабуть, пояснює, чому ви не можете мати кілька програм з однойменною роботою, як відкриті з параметрами. Поганий дизайн.
курйозданні

2
Так, майже. Але Відкрити діалоговим вікном читається з HKCR\ApplicationsтаRegisteredApplications
w32sh

4
Microsoft надала відео про це: channel9.msdn.com/Shows/Defrag-Tools/Defrag-Tools-133-App-Paths
magicandre1981

6
Звичайно, ви можете використовувати startвбудований, який шукає шляхи до програми.
Ніл

1
Це досить добре зафіксовано тут . Я також пояснив, як cmd здійснює пошук тут - це трохи особливий випадок, відмінний від API Win32.
Боб

4

Відповідь 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 з відповідними параметрами та запустити / повторно використовувати jEdit .

Наскільки я бачу, ім'я ключа повинно закінчуватися на ".exe", тому для створення псевдоніма "abc" ви створюєте ключ "abc.exe", навіть якщо він не вказує на файл ".exe". .


Тут не працює, якщо я використовую додаткові комутатори після імені виконавчого файлу.
w32sh

@ w32sh Гм, я думаю, це змінилось у програмі Win 10 :(
IMSoP

-1

У командному рядку є змінна середовища, яка називається PATH, або% PATH%. Він містить низку локацій для пошуку.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.