Где "СТАРТ" ищет исполняемые файлы?

В моей компании мы используем пакетный файл для запуска Matlab. Пакетный файл подготавливает среду перед запуском Matlab.

Сам Matlab начинается с

START MATLAB.EXE

У меня установлено несколько версий Matlab. И эта команда запускает неправильную версию Matlab. Где START ищет исполняемые файлы?

2 ответа

Решение

Команда start находит исполняемые файлы для запуска аналогично интерпретатору командной строки cmd.exe, если не используется абсолютный путь, с использованием дополнительно расширений, перечисленных в переменной окружения PATHEXT, разделенных точками с запятой, если расширение файла также отсутствует.

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

  2. Все каталоги переменной среды PATH в порядке, указанном в PATH.

    Просто введите в окне командной строки set path чтобы увидеть все каталоги в PATH, а также все расширения файлов в PATHEXT.

    Обратите внимание, что каждая учетная запись пользователя имеет свой собственный путь. Поэтому PATH системной учетной записи обычно отличается от PATH стандартной учетной записи пользователя. Это очень важно при запуске командного файла с помощью команды runas или через планировщик задач с использованием другой учетной записи.

    Пакетный файл, размещенный Jason Faulkner, также очень полезен здесь.

  3. старт выглядит дальше в реестре под ключами

    HKEY_CURRENT_USER \ Программное обеспечение \ Microsoft \ Windows \ CurrentVersion \ Пути к приложениям
    HKEY_CURRENT_USER\Software\ Wow6432Node\Microsoft\Windows\CurrentVersion\ Пути к приложениям
    HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\ Пути к приложениям
    HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\ Пути к приложениям

    Приложения, установленные с пакетом MSI (встроенный в установщик EXE или опубликованный отдельно) с использованием msiexec, имеют свои имена файлов, зарегистрированные в разделе " Пути к приложениям" со строковым значением по умолчанию, содержащим имя исполняемого файла с полным путем. Часто существует второе строковое значение с именем Path, содержащее только полный путь к исполняемому файлу приложения. Другие установщики регистрируют приложение также в App Pathsсм. статью Microsoft о регистрации приложений.

Ключ App Paths в кусте реестра HKEY_CURRENT_USER обычно не существует, так как установка выполняется с использованием доверенного установщика или учетной записи локального администратора, и, следовательно, регистрация установленного приложения выполняется в кусте реестра HKEY_LOCAL_MACHINE, Но при установке приложения на пользователя HKCU путь используется для регистрации приложения вместо HKLM дорожка.

Ключ App Paths под ключом Wow6432Node существует только в Windows x64. Но приложения x86, тем не менее, обычно регистрируются в обоих путях приложений, хотя Wow6432Node предназначен для 32-разрядных приложений, а другое дерево - для 64-разрядных приложений в Windows 7 x64, Windows Server 2008 R2 x64 и более поздних версиях Windows x64. Подробнее см. Статью Microsoft " Ключи реестра", затронутые WOW64.

Еще одна заметка:

Даже с .exe указан, начать поиск в текущем рабочем каталоге, а также в каталогах PATH после того, как не найден AppName.exe дополнительно для AppName.exe.* и проверяет расширение файла (строка после последнего периода) по отношению к расширениям файла в PATHEXT, если это возвращает одно или несколько имен файлов. Тем не менее всегда лучше указать расширение файла приложения, чтобы начать поиск AppName.exe всегда выполняется первым, прежде чем выполняется поиск по шаблону, если AppName.exe не может быть найден в текущем каталоге.

Бесплатный инструмент Process Monitor от Sysinternals (Microsoft) - отличный инструмент для поиска подобных вещей.

И последнее, но не менее важное: ни один из исполняемых файлов запуска проверяет также HKEY_CLASSES_ROOT для ассоциации файлов, чтобы открыть файл или URI (URL) со связанным приложением, определенным для команды open. Это причина, почему что-то вроде ниже также работает.

start MyTextFile.txt
start https://stackru.com/

%SystemRoot%\System32\cmd.exe содержащий код для start использует функцию оболочки Windows ShellExecuteEx для выполнения приложений или открытия файлов или URL-адресов со связанным приложением.

Вы можете использовать этот пакетный файл, чтобы определить, где система разрешает данный EXE-файл:

@ECHO OFF
REM Save this as C:\CheckPath.bat

IF NOT "%~$PATH:1" == "" (
    ECHO %~$PATH:1
) ELSE (
    ECHO Could not find "%~1" inside of a registered PATH.
)

Сейчас работает:

  • C:\CheckPath.bat cmd.exe возвращается C:\Windows\System32\cmd.exe
  • C:\CheckPath.bat NotValid.exe возвращается Could not find "NotValid.exe" inside of a registered PATH.

Попробуйте запустить CheckPath.bat MATLAB.exe и вы можете увидеть, где система разрешает путь.

Примечание. Это разрешит каталог, если вы не переопределяете %PATH% в вашем сценарии.

Другие вопросы по тегам