34

Я попробовал следующий эксперимент.

Прежде чем начать, я проверил переменную PATH из cmd, которая имеет следующее значение:

Path=C:\Program Files (x86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS Client\;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;C:\ProgramData\Lenovo\ReadyApps;C:\Program Files\Microsoft SQL Server\110\Tools\Binn\;C:\Program Files\Microsoft SQL Server\120\Tools\Binn\;C:\Program Files (x86)\Windows Live\Shared;C:\Program Files (x86)\Skype\Phone\;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files (x86)\Calibre2\;C:\Program Files\Intel\WiFi\bin\;C:\Program Files\Common Files\Intel\WirelessCommon\;

Сначала я подумал, что cmd ищет только исполняемые файлы в каталогах, содержащихся в переменной PATH, поэтому я случайно выбрал приложение - winword.exe (Microsoft Word) и попытался запустить его из командной строки:

start winword

Но, к моему удивлению, программа запускается! Причина, по которой я удивлен, заключается в том, что я искал во всех каталогах переменной PATH exe-файл с именем «winword», но все мои поиски оказались пустыми!

Поэтому я пришел к выводу, что командная строка должна была искать в местах, отличных от указанных в переменной PATH, для поиска исполняемых файлов.

Очевидно, что в следующий раз я искал точное место, где находится исполняемый файл winword. Оказывается, что winword.exe находится здесь:

C:\Program Files\Microsoft Office 15\root\office15

Следовательно, дает мне идею, что, возможно, CMD автоматически просматривает ProgramFiles и ProgramFiles(x86) (и все их подкаталоги) при выполнении команды start? В результате я попытался запустить другое приложение, установленное на моем компьютере, Audacity, с файлом exe, расположенным по адресу:

C:\Program Files (x86)\Audacity

Опять же, к моему удивлению, Audacity не удалось запустить, когда я набрал:

start audacity

в командной строке.

Затем я добавил каталог, содержащий audacity.exe в PATH:

set path=%path%;C:\Program Files (x86)\Audacity

после чего я снова попытался запустить Audacity:

start audacity

Неудивительно, что Audacity запущен.

Я хочу знать, где именно командная строка ищет исполняемые файлы? Почему winword.exe запускается, даже если каталог, содержащий его, не является частью PATH, но то же самое не относится к audacity.exe?

Я пробовал и другие приложения. Chrome и Firefox работают, когда я использую команду запуска.

ОБНОВЛЕНИЕ: я использую версию Windows 6.3.9600 (Windows 8.1)

5 ответов5

44

Сначала я подумал, что cmd ищет только исполняемые файлы в каталогах, содержащихся в переменной PATH, поэтому я случайно выбрал приложение - winword.exe (Microsoft Word) и попытался запустить его из командной строки:

Причиной работы winword.exe является то, что существует раздел реестра, который определяет путь к Microsoft Word (Winword.exe). Аналогичный ключ существует для Firefox.exe и Chrome.exe, если эти приложения установлены.

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths

Я хочу знать, где именно командная строка ищет исполняемые файлы?

Переменная PATH системы, переменная PATH пользователя и различные ключи в ..\App Paths . Я смог подтвердить, что Audacity не создает ключ для себя, когда он установлен.

Когда функция ShellExecuteEx вызывается с именем исполняемого файла в параметре lpFile, существует несколько мест, где функция ищет файл. Мы рекомендуем зарегистрировать ваше приложение в разделе реестра «Пути к приложениям». Это избавляет приложения от необходимости изменять системную переменную среды PATH.

  • Текущий рабочий каталог.
  • Только каталог Windows (подкаталоги не ищутся).
  • Каталог Windows\System32.
  • Каталоги, перечисленные в переменной среды PATH.
  • Рекомендуется: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\ Пути к приложениям

Источник: Регистрация приложения

15

Из командной строки, если вы просто вводите WinWord он не запускается.

Если вы введете START WinWord он запустится.

Команда Start является ключевой здесь.

При попытке выполнить файл с помощью команды запуска командная строка не выполняет поиск. Вместо этого он передает имя файла (и аргументы) в саму Windows (посредством вызова API ShellExecuteEx), который затем должен найти местоположение файла. Есть несколько мест, где он ищет в следующем порядке:

  • Текущий рабочий каталог.

  • Только каталог Windows (подкаталоги не ищутся).

  • Каталог Windows\System32 .

  • Каталоги, перечисленные в переменной среды PATH .

  • Рекомендуемые:
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths

WinWord находится в этом разделе реестра. Ключ в том, чтобы не допустить, чтобы PATH становился слишком длинным.

6

Программа (когда вы указываете имя модуля без диска / пути в командной строке) в командном процессоре Windows (CMD.EXE) может быть запущена при обнаружении:

  • по переменной среды PATH (как исполняемый файл, так и его hardlink/softlink/shortcut с тем же именем)

  • по псевдониму DOSKEY

  • по пути приложения из HKLM\Software\Microsoft\Windows\CurrentVersion\App Paths или HKCU\Software\Microsoft\Windows\CurrentVersion\App Paths (при использовании команды start )

Используя эти знания (особенно последние), вы можете создавать собственные псевдонимы, удобные для вас. Например, вы можете создать HKCU\Software\Microsoft\Windows\CurrentVersion\App Paths\au.exe со значением по умолчанию C:\Program Files (x86)\Audacity\Audacity.exe и запустить это приложение, просто введя команду start au в команде незамедлительный.

0

start winword не сообщает командной строке для запуска winword . Он сообщает командной строке запустить start с аргументом winword . Start использует свои собственные методы для поиска winword .

Просто winword сообщает командной строке для запуска winword . И если вы попробуете это, поскольку winword отсутствует в PATH , он не запускается.

0

В то время как другие ответы могут быть конкретной причиной в вашем случае, есть и другой ответ на ваш вопрос, который мог бы иметь место для некоторых других приложений: там же, где вы искали, но с другими расширениями файлов.

Вы специально сказали, что искали файлы с расширением exe . Windows также попытается выполнить файлы других расширений.

Другой переменной среды, которая вступает в игру при выполнении команды, является переменная PATHEXT . Это ; -ограниченный список расширений файлов, чтобы попытаться выполнить. Если вы повторяете PATHEXT вы можете увидеть что-то вроде .COM;.EXE;.BAT;.CMD;.VBS; ... (так далее.). Некоторые приложения используют эти другие типы файлов в качестве точки входа конечного пользователя. Это гораздо реже, но это случается. Я использовал несколько основных коммерческих продуктов, которые начинаются с .BAT скрипты. Чтобы использовать один из них в качестве примера, я могу запустить его с помощью команды standalone даже если нет standalone.exe ... вместо этого у него есть standalone.bat .

Некоторые из расширений, которые у меня есть в PATHEXT на которые я сейчас смотрю, никогда не использовались в приложениях. Те , которые я запустить в гораздо чаще (но , очевидно , не так много , как exe являются: .com .bat .vbs .js .jar Первые два представляют собой файлы пакетных сценариев Windows, а остальные три представляют собой типы файлов для конкретных языков программирования, которые запускаются из сценариев или виртуальных машин, а не из exe s (соответственно: Visual Basic, Javascript и Java).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .