e9990638
Давайте сначала

Я только что протестировал свой вариант на виртуалке и он сработал. В моем варианте есть три файла install
X.cmd, используемые для импорта ключей реестра и вызова файлов установки программ launch
X.cmd, в конце которого в свою очередь дается команда на перезагрузку. Для простоты эксперимента у меня был всего один файл launch.cmd, который пинговал localhost. Вы, конечно, можете сделать три таких файла, изменив файлы install
X.cmd соответственно.
install1.cmd
Код:

@echo off
REM Добавляем файл, выполняющий команды после первой перезагрузки (второй набор комманд)
set key=HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Runonce
REG ADD %KEY% /V command0 /D "%systemdrive%\install\install2.cmd" /f
REM Выполняем первый набор команд
CALL "%systemdrive%\install\launch.cmd"
exit
install2.cmd
Код:

@echo off
REM Добавляем файл, выполняющий команды после второй перезагрузки (третий набор комманд)
set key=HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Runonce
REG ADD %KEY% /V command0 /D "%systemdrive%\install\install3.cmd" /f
REM Выполняем второй набор команд
CALL "%systemdrive%\install\launch.cmd"
exit
install3.cmd
Код:

@echo off
REM Выполняем третий набор команд
CALL "%systemdrive%\install\launch.cmd"
exit
launch.cmd
Код:

@echo off
REM Команды на запуск приложений
ping localhost >> %systemdrive%\install\output.txt"
REM Перезагрузка
shutdown.exe -r -f -t 5 -c "Don`t panic. The system will reboot in 5 seconds."
exit
После всех перезагрузок у меня появился файл
output.txt, в котором отчетливо видно, что команда ping отработала три раза.
Безусловно, в файле
install2.cmd можно вместо
install3.cmd сразу импортировать в реестр команду на вызов
launch3.cmd.
Протестировать можно запуском
install1.cmd, который в сучае успеха надо прописать в [GuiRunOnce].
P.S. По поводу
HKCU\Software\Microsoft\Windows\CurrentVersion\RunOnce vs.
HKLM\Software\Microsoft\Windows\CurrentVersion\RunOnce. Команды импортированные в HKLM выполнятся для пользователя, который следующим войдет в систему, причем неважно кто это будет. Команды импортированные в HKCU выполнятся только для пользователя, из под учетной записи которого они были импортированы.
Также, Команды импортированные в HKCU из cmdlines.txt, выполнятся для всех пользователей в системе, включая созданных впоследствии.
P.P.S. По поводу RunOnce vs. RunOnceEx. Там разный синтаксис, RunOnceEx обладает неким интерфейсом, для отображения прогресса установки. См. статьи на сайте. Вышеуказанный метод вполне можно адаптировать под RunOnceEx, но этим вы займитесь уже самостоятельно.