С разрешения
gora выкладываю свою версию.
Постарался как можно позже вызвать перезагрузку, но делать это до появления рабочего стола.
Во время запуска (Т-13) сканирует ветку RunOnceEx, находит последнюю ветку и
дописывает последней командой вызов себя из RunOnce.
(если RunOnceEx пустой - используется ветка 950)
При отсутствии в RunOnceEx TITLE прописывает значение "Установка приложений"
Копирует себя в папку system32, где после отработки стирается.
Ключи запуска:
-i - прописать запуск в реестр
-w[N] - таймер до перезагрузки (по умолчанию 30 сек)
-k[N] - пауза после запуска перезагрузки (по умолчанию 10 сек)
-del - самоубийство
Немного подробней:
На Т-12 происходит скан реестра, например последняя ветка 770, с 2 командами.
xReboot пропишет 3 командой следующую строку:
REG ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce\ /V "Shutdown" /D "xReboot.exe" /f
Во время первого входа в систему будут отрабатываться все команды из RunOnceEx,
после выполнения 2 команд 770 ветки добавиться ключ Shutdown в ветку RunOnce
(не путать с RunOnceEx)
Если по каким либо причинам добавились ветки старше 770 - то они отработают!!!
После отработки всей ветки RunOnceEx начинает отрабатываться RunOnce, например
у меня там Del_WU_Shortcut и NetFxUpdate_v1.1.4322 (от DotNet11_35).
Вот на этом этапе и стартанёт xReboot.
Пропишет автокилл при следующей загрузке и сделает перезагрузку.
Возможные проблемы:
- Использование 950 ветки после отработки xReboot и отсутствии ключей в RunOnceEx
История изменений:
04.06.2008:
- Форсированный ребут (был обычный)
- Изменён алгоритм вычисления ключа запуска, теперь некритична неправильная нумерация RunOnceEx.
- Копирование в %systemroot%\system32 для дальнейшего запуска с дальнейшим удалением. Так что проблема с картридерами решена.
- В Run установил k0, что соответствует 3 минутам ожидания.
- Новый ключ -del.
28.05.2008:
- Первая версия