Спасибо за новую версию аддона!
Несмотря ни на что всё же остаётся вероятность что что-то отработает не до конца и будет прервано Shutdown-ом.
Так-же борьба и споры за порядок в RunOnceEx натолкнуло на мысль о помещении перезагрузки в ветку RunOnce, которая отрабатывается после RunOnceEx.
Стал эксперементировать с этой веткой, ведь и в ней необходимо разместить перезагрузку последней.
Но как ни странно имя ключа никак не влияло на порядок отработки, а влияло когда данная запись была сделана, т.е. те записи, что были сделаны первыми и запускались первыми, отсюда вывод, что нужно помещать перезагрузку последней.
Вторым открытием для меня стало что ветка RunOnce считывается после отработки RunOnceEx и как следствие из RunOnceEx можно добавлять в RunOnce для отработки.
Тем самым мы получаем отработку всех ключей RunOnceEx и всех RunOnce, которые находились в ветке на момент добавления. Например у меня:
Код:
Код: Выделить всё
1. Del_WU_Shortcut, тип REG_EXPAND_SZ, значение - rundll32.exe advpack.dll,LaunchINFSection Pck_MU.inf,RunOnceInst,0
2. NetFxUpdate_v1.1.4322, тип REG_SZ, значение - "C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\netfxupdate.exe" 0 v1.1.4322 GAC + NI NID
Остаётся вопрос -
нужна ли теперь задержка при перезагрузке? Ведь Shutdown порождает дочерний процесс и закрывается, тем самым завершая выполнение RunOnce и начало загрузки рабочего стола, чего нам (ну по крайней мере мне) не хотелось бы.
Поэтому устанавливая таймер в 0 мы перезагружаемся, тем самым ставя под угрозу невыполнения только то, что как Shutdown закрываясь запускает что-то дочернее и те процедуры, что добавили значения в RunOnce (из RunOnceEx) после добавления перезагрузки (что маловероятно).
В крайнем случае, для подстраховки и т.д. достаточно добавить после Shutdown в RunOnce паузу, штатными средствами у меня вышло вызовом cmd с ключом k.
Может сложно написал, но как могу.
Ну а реализация - cmd-шник, на аддон пока не претендую
С паузой:
Код:
Код: Выделить всё
REG ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx /V TITLE /D "Установка приложений" /f
REG ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx\950 /VE /D "Подготовка к перезагрузке" /f
REG ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx\950 /V 1 /D "REG ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce\ /V \"Reboot01\" /D \"Shutdown -r -t 30 -f\" /f" /f
REG ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx\950 /V 2 /D "REG ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce\ /V \"Reboot02\" /D \"cmd /k echo Reboot system, please wait, dont close this window...\" /f" /f
Без паузы:
Код:
Код: Выделить всё
REG ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx /V TITLE /D "Установка приложений" /f
REG ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx\950 /VE /D "Подготовка к перезагрузке" /f
REG ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx\950 /V 1 /D "REG ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce\ /V \"Reboot01\" /D \"Shutdown -r -t 0 -f\" /f" /f
(кодировка cmd - DOS)
Жду мнений.