RunOnceEx - перезагрузка системы после каждой установки - PullRequest
1 голос
/ 06 декабря 2011

Можно ли как-нибудь перезагрузить компьютер после каждой установки компонента, указанной в файле RunOnceEx.CMD?

Я создаю автоматический установочный диск для Windows XP, который установит некоторое программное обеспечение по умолчанию после установки Windows в системе. Я использую файл RunOnceEx.cmd для определения программного обеспечения, которое необходимо установить, и я хочу перезагрузить систему после установки каждого программного обеспечения.

Спасибо и всего наилучшего,

1 Ответ

0 голосов
/ 24 апреля 2012

Да, есть. Хотя это не поддерживаемая функция. Я делаю что-то подобное.

Возможно, это не самое причудливое решение, но оно работает надежно. Ключ должен остановить процесс RunOnceEx (rundll32.exe) перед началом процедуры перезагрузки. Если он не остановлен, Windows остановит все процессы перед выключением в неизвестном порядке. И если этот порядок означает уничтожение нашего процесса «Перезагрузка» перед тем, как завершить процесс RunOnceEx, он продолжит работу со следующим элементом в списке RunOnceEx до того, как его убьют (и, следовательно, прервут, что нам не нужно).

Простой ответ: добавьте ключ перезагрузки, который убивает процесс RunOnceEx, а затем перезагрузится:

set %KEY%=HKLM\Software\Microsoft\Windows\CurrentVersion\RunOnceEx
REG ADD %KEY%\009 /ve /D "Reboot.." /f
REG ADD %KEY%\009 /v 1 /D "cmd.exe /c taskkill.exe /f /im rundll32.exe & shutdown /r /t 0 /f" /f

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

set %KEY%=HKLM\Software\Microsoft\Windows\CurrentVersion\RunOnceEx
REG ADD %KEY%\009 /ve /D "Reboot.." /f
REG ADD %KEY%\009 /v 1 /D "cmd.exe /c REG DELETE %key%\009 /va /f & taskkill.exe /f /im rundll32.exe & shutdown /r /t 0 /f" /f

Надеюсь, это поможет.

Edit:

В XP вам, возможно, придется использовать tskill вместо taskkill, но принцип тот же.

...