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

regist

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

Dragokas

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

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
5,917
Симпатии
5,757
Баллы
588
#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
Разработчик
Сообщения
12,251
Симпатии
5,851
Баллы
918
#5
1)
Совместимость: Vista +. В XP может не работать.
мне нужно было как раз для XP, но может кому пригодится.
2) Как понимаю тут команда будет запускаться и обрабатываться интерпретатором CMD, а значит есть вероятность что если туже команду будет выполнять система результат будет немного другой?
 

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
5,917
Симпатии
5,757
Баллы
588
#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.
 
Последнее редактирование:

regist

гоняюсь за туманом
Ассоциация VN/VIP
VIP
Разработчик
Сообщения
12,251
Симпатии
5,851
Баллы
918
#7
В безопасном режиме эта ветка не работает.
судя по документации работает. Оригинальная страница уже удалена, поэтому ссылка на веб-архив A definition of the Run keys in the Windows XP registry
По умолчанию эти ключи игнорируются при запуске компьютера в безопасном режиме. Имя значения для ключей RunOnce может иметь префикс звездочки (*), чтобы заставить программу работать даже в безопасном режиме.

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

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

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