• Администрация SafeZone приветствует вас на нашем форуме!
    Если вы больше не желаете видеть рекламу при просмотре тем и сообщений - то достаточно просто зарегистрироваться. Для зарегистрированных пользователей реклама не отображается.

Инициализация RunOnce

regist

гоняюсь за туманом
Ассоциация VN/VIP
VIP
Разработчик
Сообщения
11,834
Симпатии
5,564
#1
Для того чтобы вручную инициализировать запуск из RunOnceEx можно выполнить команду
CMD/BATCH:
rundll32.exe iernonce.dll,RunOnceExProcess
а можно подробным образом (не делая выхода и повторный логон в виндоус) заставить запуститься прописанное в ключ RunOnce ?
 

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
5,413
Симпатии
5,278
#2
Подобным нельзя. По крайней мере у этой библиотеки такой функции нет и инфу по аналогам из других либ я не нашел.
Можно прописать однострочную команду чтения и запуска содержимого этой ветки через reg query.
 

regist

гоняюсь за туманом
Ассоциация VN/VIP
VIP
Разработчик
Сообщения
11,834
Симпатии
5,564
#3

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
5,413
Симпатии
5,278
#4
Запускать из-под пуск, выполнить или командной строки:
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 может не работать.
 

regist

гоняюсь за туманом
Ассоциация VN/VIP
VIP
Разработчик
Сообщения
11,834
Симпатии
5,564
#5
1)
Совместимость: Vista +. В XP может не работать.
мне нужно было как раз для XP, но может кому пригодится.
2) Как понимаю тут команда будет запускаться и обрабатываться интерпретатором CMD, а значит есть вероятность что если туже команду будет выполнять система результат будет немного другой?
 

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
5,413
Симпатии
5,278
#6
А они и в реальном запуске работают не от имени системы. От системы запускаются только 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.
 
Последнее редактирование: