[CMD] Инициализация RunOnce

regist

гоняюсь за туманом
Ассоциация VN/VIP
VIP
Разработчик
Сообщения
14,886
Реакции
6,796
Для того чтобы вручную инициализировать запуск из RunOnceEx можно выполнить команду
CMD/BATCH:
rundll32.exe iernonce.dll,RunOnceExProcess
а можно подробным образом (не делая выхода и повторный логон в виндоус) заставить запуститься прописанное в ключ RunOnce ?
 
Подобным нельзя. По крайней мере у этой библиотеки такой функции нет и инфу по аналогам из других либ я не нашел.
Можно прописать однострочную команду чтения и запуска содержимого этой ветки через reg query.
 
Запускать из-под пуск, выполнить или командной строки:
CMD/BATCH:
cmd /c "for /f "tokens=2*" %a in ('reg query "HKLM\Software\Microsoft\Windows\CurrentVersion\RunOnce"^|find "REG_"') do start "" "%~b""
Это только для ветки HKLM.
Совместимость: Vista +. В XP может не работать.
 
1)
Совместимость: Vista +. В XP может не работать.
мне нужно было как раз для XP, но может кому пригодится.
2) Как понимаю тут команда будет запускаться и обрабатываться интерпретатором CMD, а значит есть вероятность что если туже команду будет выполнять система результат будет немного другой?
 
А они и в реальном запуске работают не от имени системы. От системы запускаются только Logon Scripts.
На счет RunOnce - тот, что сидит в HKCU - от имени пользователя, а из HKLM - просто с повышенными привилегиями.

rundll32 запускает команды с наследованием прав, которые ей дают при запуске.

RunOnce исполняется при входе Администратора в систему.
Сначала загружаются RunServicesOnce и RunServices.
После них RunOnce, при условии входа Администратора (в случае c HKLM), а не пользователя с ограниченными правами:
http://support.microsoft.com/kb/179365/ru
В безопасном режиме эта ветка не работает.
Кстати, там пишется, что команды выполняются синхронно.
Значит для полной имитации нужно добавить ключ /WAIT:
Код:
... start /WAIT "" "%~b""

Вообще, права запуска можно проверить создав ключ:
Код:
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx\100]
"test"="cmd /c \"whoami& pause\""
Утилита WhoAmi есть только в Vista +. Для XP нужно писать по-другому.

Если все же хочется симитировать запуск от имени системы, достаточно добавить в начало скрипта psexec, например:
Код:
psexec -s -i rundll32.exe iernonce.dll,RunOnceExProcess
Это будет работать только для ветки HKLM.
 
Последнее редактирование:
В безопасном режиме эта ветка не работает.
судя по документации работает. Оригинальная страница уже удалена, поэтому ссылка на веб-архив A definition of the Run keys in the Windows XP registry
По умолчанию эти ключи игнорируются при запуске компьютера в безопасном режиме. Имя значения для ключей RunOnce может иметь префикс звездочки (*), чтобы заставить программу работать даже в безопасном режиме.

По умолчанию значение ключа RunOnce удаляется до запуска командной строки. Вы можете префикс имени значения RunOnce с восклицательным знаком (!), Чтобы отложить удаление значения до тех пор, пока команда не запустится. Без префикса восклицательной точки, если операция RunOnce завершилась неудачно, соответствующая программа не будет запрашиваться при следующем запуске компьютера.

add. а эта ссылка пока работает Run and RunOnce Registry Keys

Но я попробовал на виртуалке с XP восклицательный знак добавить, так хорошо что на виртуалке :). У меня получилась цикличная авторизация в учётке. То есть только заходит в учётку, тут же выходит и снова входит.
Так что похоже эти приёмы лучше не использовать, либо использовать с большой осторожностью.
 
Назад
Сверху Снизу