Файл winpeshl.ini создан, но ни одной команды выполнено не было: причины и решение

Сообщение о том, что файл winpeshl.ini создан, но ни одной команды выполнено не было, появляется в среде предустановки Windows PE при загрузке с установочной флешки или кастомного WinPE-образа — и чаще всего причиной оказывается неправильный синтаксис или кодировка самого файла. Система находит winpeshl.ini в папке X:\Windows\System32, пытается разобрать его содержимое, но не может сопоставить записи с ожидаемой структурой, поэтому просто пропускает выполнение и запускает стандартную оболочку.

Ошибка не блокирует загрузку Windows PE полностью — обычно после неё открывается окно командной строки. Однако если вы рассчитывали на автоматический запуск собственного скрипта, программы разметки диска или кастомного установщика, эта цепочка не сработает. Ниже разберём, как устроен файл, какие ошибки в нём встречаются чаще всего и как добиться корректного выполнения команд.

Что такое winpeshl.ini и как он работает

Файл winpeshl.ini — это конфигурационный файл среды Windows Preinstallation Environment, который обрабатывается на этапе запуска оболочки. Его основная задача — указать, какие приложения, скрипты или команды должны стартовать вместо стандартной оболочки cmd.exe или до её запуска. Файл размещается в каталоге %SystemRoot%\System32 внутри образа WinPE, то есть в загруженной среде это путь X:\Windows\System32\winpeshl.ini.

Обработкой файла занимает компонент winpeshl.exe, который стартует одним из первых после инициализации ядра WinPE. Он читает секции внутри файла и последовательно выполняет перечисленные команды. Если структура файла не соответствует ожидаемой, парсер фиксирует проблему и выводит предупреждение о том, что ни одна команда не была выполнена.

Важно понимать различие между winpeshl.ini и другими механизмами автозапуска в WinPE:

  • 🔹 winpeshl.ini — запускает приложения на этапе инициализации оболочки, до появления командной строки;
  • 🔹 startnet.cmd — выполняется уже внутри командной строки, если оболочка по умолчанию не переопределена;
  • 🔹 Unattend.xml — управляет этапами установки Windows, а не запуском произвольных программ в WinPE.

Основные причины, по которым команды не выполняются

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

Неправильная кодировка файла. Это одна из самых частых причин. Файл должен быть сохранён в кодировке, которую понимает парсер WinPE. Если вы редактировали winpeshl.ini в Блокноте и сохранили его в UTF-8 с BOM или в UTF-16, парсер может не распознать секции. Безопасный вариант — ANSI (Windows-1251) или UTF-8 без BOM, при этом первая строка файла должна сразу начинаться с имени секции, без служебных байтов в начале.

Ошибки в синтаксисе секций. Файл имеет жёсткую структуру: секция [LaunchApps] для запуска приложений, а путь к каждой программе указывается с новой строки. Если вместо квадратных скобок использованы другие символы, пропущено имя секции или команды записаны вне секции, файл будет проигнорирован.

Неверные пути к исполняемым файлам. В среде WinPE системный диск обычно имеет букву X:, а не C:. Если в файле указан путь вида C:\Tools\setup.exe, который в момент загрузки WinPE не существует, команда не выполнится. Стоит также учитывать, что буквы дисков флешки и жёстких дисков в WinPE могут отличаться от привычных.

⚠️ Внимание: не копируйте примеры winpeshl.ini из интернета «как есть» — пути, буквы дисков и имена файлов в чужом примере почти наверняка не совпадают с вашей конфигурацией. Каждую строку нужно адаптировать под структуру своего образа.

Правильная структура и синтаксис файла

Минимальный корректный winpeshl.ini выглядит предельно просто: секция [LaunchApps], под ней — по одной команде на строку. Путь к программе и её аргументы разделяются запятой, а не пробелом — это типичная деталь, о которой часто забывают.

[LaunchApps]

%SYSTEMDRIVE%\Tools\myscript.cmd

%SYSTEMROOT%\System32\wpeinit.exe

Обратите внимание на несколько правил. Во-первых, переменные окружения вроде %SYSTEMDRIVE% и %SYSTEMROOT% поддерживаются и предпочтительнее жёстко прописанных букв дисков. Во-вторых, если путь содержит пробелы, его следует заключать в кавычки. В-третьих, аргументы команды отделяются от пути запятой: "путь\program.exe", /параметр.

Типичные ошибки синтаксиса, из-за которых файл не обрабатывается:

  • ❌ отсутствует заголовок секции [LaunchApps] — команды записаны просто списком;
  • ❌ аргументы отделены пробелом вместо запятой;
  • ❌ лишние пробелы или невидимые символы в начале строк после копирования из веб-страницы;
  • ❌ файл сохранён с расширением .txt и реально называется winpeshl.ini.txt.

Пошаговая диагностика проблемы

Начните проверку прямо в загруженной среде WinPE — это быстрее, чем пересобирать образ вслепую. Когда появится командная строка, выполните просмотр файла, чтобы убедиться, что система видит именно то содержимое, которое вы записывали.

type X:\Windows\System32\winpeshl.ini

Если вместо читаемого текста выводятся иероглифы, лишние символы в первой строке или пустота — проблема в кодировке или в том, что файл был повреждён при копировании. Если содержимое отображается корректно, переходите к проверке путей: убедитесь, что каждый указанный в файле исполняемый файл действительно существует по заданному пути, выполнив dir для соответствующего каталога.

☑️ Проверка winpeshl.ini перед пересборкой образа

Выполнено: 0 / 6

Далее проверьте, запускаются ли команды вручную. Введите в командной строке WinPE тот же путь, что прописан в файле. Если программа не стартует вручную — проблема не в winpeshl.ini, а в самом приложении: например, ему не хватает зависимостей (библиотек) в составе образа WinPE, либо оно собрано под другую разрядность.

⚠️ Внимание: 64-разрядная среда WinPE не запускает 16-битные программы, а для 32-битных приложений требуется соответствующая разрядность самого образа. Проверьте совместимость архитектуры до добавления программы в автозапуск.
📊 Где вы столкнулись с ошибкой winpeshl.ini?
При установке Windows с флешки
В собственном образе WinPE
В загрузочном образе для диагностики
При развёртывании по сети

Кодировка и невидимые символы — скрытая причина сбоя

Отдельного внимания заслуживает сценарий, когда файл выглядит идеально при просмотре, но всё равно не обрабатывается. Возможная причина — сигнатура BOM в начале файла. Редакторы вроде Блокнота Windows при сохранении в UTF-8 добавляют три служебных байта перед первым символом. Для парсера winpeshl.ini это означает, что первая строка начинается не с [LaunchApps], а с мусорных байтов, и секция не распознаётся.

Решение — пересохранить файл в редакторе, который позволяет явно выбрать кодировку. Подойдут Notepad++, AkelPad или аналогичные: выберите вариант «ANSI» либо «UTF-8 без BOM» и сохраните файл заново. После этого снова проверьте содержимое командой type в среде WinPE.

Ещё один источник невидимых проблем — копирование текста из браузера или документов Word. Вместе с видимым текстом могут переноситься неразрывные пробелы, типографские кавычки вместо прямых и символы перевода строк в формате, отличном от Windows (CRLF). Надёжнее набирать содержимое файла вручную в простом редакторе, а не вставлять извне.

Как проверить наличие BOM в файле

Откройте файл в Notepad++ — кодировка отображается в строке состояния внизу окна. Если указано «UTF-8-BOM», выберите в меню «Кодировки» пункт «Преобразовать в UTF-8 без BOM» и сохраните файл. Либо выберите кодировку ANSI, если в файле нет символов, которым требуется Unicode.

Размещение файла внутри образа WinPE

Даже идеально составленный файл не сработает, если он не попал внутрь загрузочного образа. Файл должен находиться в каталоге Windows\System32 внутри WIM-образа WinPE, а не просто лежать в корне флешки. Содержимое корня флешки в загруженной среде — это не X:\, поэтому файл, скопированный «рядом» с установщиком, обработан не будет.

Чтобы внедрить файл в образ, используется стандартный механизм монтирования WIM через DISM. Общая последовательность выглядит так: смонтировать образ, скопировать файл в нужный каталог, зафиксировать изменения.

dism /Mount-Wim /WimFile:boot.wim /Index:1 /MountDir:C:\mount

copy winpeshl.ini C:\mount\Windows\System32\

dism /Unmount-Wim /MountDir:C:\mount /Commit

Ключевой момент — флаг /Commit при размонтировании: без него все изменения будут отброшены, и вы получите ровно ту же ошибку при следующей загрузке. После пересборки образа обновите загрузочную флешку, иначе она продолжит использовать старую версию WIM-файла.

Альтернатива: запуск через startnet.cmd

Если задача — просто выполнить скрипт или набор команд при загрузке WinPE, а не заменить оболочку собственным приложением, рассмотрите файл startnet.cmd. Он располагается в том же каталоге Windows\System32 и выполняется автоматически при старте стандартной командной строки WinPE. Синтаксис у него обычный, как у любого bat-файла, без секций и запятых-разделителей.

Для многих сценариев — инициализация сети через wpeinit, подключение сетевых дисков, запуск скрипта установки — startnet.cmd проще в отладке, потому что ошибки в нём видны прямо в окне консоли, а не приводят к молчаливому пропуску всех команд. Winpeshl.ini оправдан, когда нужно запустить графическое приложение в качестве оболочки или строго контролировать порядок запуска нескольких программ.

Сводная таблица типичных причин и решений

ПричинаКак проявляетсяРешение
Кодировка UTF-8 с BOMФайл читается, но секция не распознаётсяПересохранить в ANSI или UTF-8 без BOM
Отсутствует секция [LaunchApps]Команды записаны без заголовка секцииДобавить заголовок первой строкой
Неверные пути (C: вместо X:)Программа не запускается и вручнуюИспользовать %SYSTEMDRIVE% или X:
Файл не внутри WIM-образаФайл отсутствует в X:\Windows\System32Внедрить через DISM с /Commit
Лишнее расширение .txtФайл называется winpeshl.ini.txtПереименовать, проверив через dir

Как видно из таблицы, большинство причин сводится к мелким ошибкам подготовки файла, а не к неисправности самой среды WinPE. Методичная проверка по чек-листу выше закрывает практически все типовые сценарии.

Часто задаваемые вопросы

Где должен находиться winpeshl.ini в среде Windows PE?

Файл должен находиться в каталоге %SystemRoot%\System32 внутри загруженной среды WinPE, что обычно соответствует пути X:\Windows\System32\winpeshl.ini. Файл, лежащий в корне флешки или в других папках, обработан не будет.

В какой кодировке сохранять winpeshl.ini?

Безопасные варианты — ANSI или UTF-8 без BOM. Сохранение в UTF-8 с BOM или UTF-16 часто приводит к тому, что парсер не распознаёт первую секцию и игнорирует файл целиком. Проверить и изменить кодировку можно в редакторах вроде Notepad++.

Чем разделяются путь и аргументы в winpeshl.ini?

Путь к программе и её аргументы разделяются запятой, а не пробелом: %SYSTEMDRIVE%\Tools\app.exe, /silent. Пути с пробелами следует заключать в кавычки.

Можно ли обойтись без winpeshl.ini?

Да. Для запуска скриптов при загрузке стандартной оболочки WinPE достаточно файла startnet.cmd в том же каталоге System32. Winpeshl.ini нужен, когда требуется заменить оболочку собственным приложением или запустить программы до появления командной строки.

Файл исправлен, но ошибка осталась — что проверить?

Убедитесь, что изменённый файл действительно попал внутрь WIM-образа: при размонтировании через DISM должен использоваться параметр /Commit, а загрузочная флешка после этого должна быть обновлена новой версией образа. Также проверьте содержимое файла командой type уже в загруженной среде WinPE.