я извиняюсь, конечно приятно что вместо непонятного самописного файла теперь запускается системный файл. Но можно узнать, что это за файл и что он делает? В папке windows я файла с именем CMD.ErrorEXE не нашёл.
CMD.exe - это командный процессор, который запускает на исполнение скрипты Batch.
Скрипты Batch сами по себе не могут исполняться в памяти. Нужна программа которая интерпретирует их (заставляет понимать ЦП, передает ему инструкции, обрабатывая команды построчно).
Когда мы запускаем файл .CMD или .BAT на самом деле сначала стартует CMD.exe, аргументом которого является скрипт.
В этом можно убедится заглянув в ассоциацию:
HKCR\cmdfile\shell\runas\command
%SystemRoot%\System32\cmd.exe /C "%1" %*
Это пример для глагола "Запуск с повышенными правами".
Если мы просто запускаем двойным кликом, то бат-файл запускается через оболочку Explorer-a, а уже он стартует CMD.exe (в чем можно убедится, посмотрев список процессов).
Параметры запуска видны исходя из:
HKCR\.cmd
cmdfile
-> HKCR\cmdfile\shell\open\command
"%1" %*
Если ассоциация EXE сбита,
cmd.exe batnik.bat вот в таком виде не запустится,
но при этом сможет запустится напрямую при двойном клике на .cmd, т.к. он работает через другой ProgID.
К сожалению, из реестра фокус запуска файла .cmd напрямую без указания ком.процессора не проходит,
поэтому мы регистрируем другое расширение .ErrorEXE,
делаем копирование %SystemRoot%\System32\cmd.exe -> %SystemRoot%\System32\cmd.ErrorEXE
и прописываем в реестровый ключ:
cmd.ErrorEXE /C Batnik.bat
regist, время жизни файла
cmd.ErrorEXE составляет от момента непосредственно перед запускам скрипта № 3... до момента упаковки финального архива,
поэтому ты его больше не видишь в системной папке. Он удаляется. Сборщик не должен оставлять после себя следов/файлов/настроек, о которых не просил пользователь.
Koza Nozdri, в принципе, даже если система не смогла перезагрузится,
пользователь видит на экране сообщение о том, что предпринимается попытка это сделать,
т.е. должен понимать, что это нужно сделать вручную.