Я попробовал следующий эксперимент.
Прежде чем начать, я проверил переменную 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)
Ответы:
Причина в
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 не создает ключ для себя, когда он установлен.Источник: Регистрация приложения
источник
Из командной строки, если вы просто введете
WinWord
его, он не запускается.Если вы введете
START WinWord
это работает.Команда
Start
является ключевой здесь.При попытке выполнить файл с помощью команды запуска командная строка не выполняет поиск. Вместо этого он передает имя файла (и аргументы) самой Windows (через вызов API ShellExecuteEx), который затем должен найти местоположение файла. Есть несколько мест, где он ищет в следующем порядке:
Текущий рабочий каталог.
Только
Windows
каталог (без подкаталогов ищется).Windows\System32
Каталог.Каталоги, перечисленные в
PATH
переменной среды.Рекомендуемые:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths
WinWord
находится в этом разделе реестра. Ключ, чтобыPATH
избежать слишком длинного.источник
Программа (когда вы указываете имя модуля без диска / пути в командной строке) в командном процессоре 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
в командной строке.источник
В то время как другие ответы, вероятно, будут конкретной причиной в вашем случае, есть и другой ответ на ваш вопрос, который мог бы иметь место для некоторых других приложений: там же, где вы искали, но с другими расширениями файлов.
Вы специально сказали, что искали файлы с расширением
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).источник
PATHEXT
иPATH
, и оба связаны с тем, чтобы все заработало, они несколько ортогональны в своих задачах.PATH
указывает, где искать объекты для выполнения, и является тем, о чем спрашивал OP, а такжеPATHEXT
указывает, что можно запустить.start winword
не говорит командную строку для запускаwinword
. Он сообщает командной строке для запускаstart
с аргументомwinword
.Start
использует свои собственные методы для поискаwinword
.Просто
winword
говорит командную строку для запускаwinword
. И если вы попробуете это, такwinword
как не наPATH
, он не запускается.источник