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

Тема в разделе "Пакетные файлы CMD, BAT", создана пользователем regist, 11 фев 2014.

  1. regist
    Оффлайн

    regist гоняюсь за туманом Ассоциация VN/VIP VIP Разработчик

    Сообщения:
    11.382
    Симпатии:
    5.268
    Для того чтобы вручную инициализировать запуск из RunOnceEx можно выполнить команду
    Код (DOS):
    rundll32.exe iernonce.dll,RunOnceExProcess
    а можно подробным образом (не делая выхода и повторный логон в виндоус) заставить запуститься прописанное в ключ RunOnce ?
     
  2. Dragokas
    Оффлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.492
    Симпатии:
    4.307
    Подобным нельзя. По крайней мере у этой библиотеки такой функции нет и инфу по аналогам из других либ я не нашел.
    Можно прописать однострочную команду чтения и запуска содержимого этой ветки через reg query.
     
  3. regist
    Оффлайн

    regist гоняюсь за туманом Ассоциация VN/VIP VIP Разработчик

    Сообщения:
    11.382
    Симпатии:
    5.268
    Можно команду увидеть?
     
  4. Dragokas
    Оффлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.492
    Симпатии:
    4.307
    Запускать из-под пуск, выполнить или командной строки:
    Код (DOS):
    cmd /c "for /f "tokens=2*" %a in ('reg query "HKLM\Software\Microsoft\Windows\CurrentVersion\RunOnce"^|find "REG_"') do start "" "%~b""
    Это только для ветки HKLM.
    Совместимость: Vista +. В XP может не работать.
     
    Drongo и Kиpилл нравится это.
  5. regist
    Оффлайн

    regist гоняюсь за туманом Ассоциация VN/VIP VIP Разработчик

    Сообщения:
    11.382
    Симпатии:
    5.268
    1)
    мне нужно было как раз для XP, но может кому пригодится.
    2) Как понимаю тут команда будет запускаться и обрабатываться интерпретатором CMD, а значит есть вероятность что если туже команду будет выполнять система результат будет немного другой?
     
  6. Dragokas
    Оффлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.492
    Симпатии:
    4.307
    А они и в реальном запуске работают не от имени системы. От системы запускаются только Logon Scripts.
    На счет RunOnce - тот, что сидит в HKCU - от имени пользователя, а из HKLM - просто с повышенными привилегиями.

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

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

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

    Если все же хочется симитировать запуск от имени системы, достаточно добавить в начало скрипта psexec, например:
    Код (Text):
    psexec -s -i rundll32.exe iernonce.dll,RunOnceExProcess
    Это будет работать только для ветки HKLM.
     
    Последнее редактирование: 12 фев 2014
    Kиpилл и Drongo нравится это.

Поделиться этой страницей