Обложка канала

Windows 11, 10, etc - Вадим Стеркин

10333 @sterkin_ru

Авторский канал. Windows 11, безопасность, мобильный мир: • тайное знание • профессиональный ликбез • гадание по логам • срыв покровов • доставка пруфов

Windows 11, 10, etc - Вадим Стеркин

4 года назад
Открыть в
⚙️ О разделах реестра RunOnce и RunOnceEx, а также Run RunOnce и RunOnceEx - очень и очень древние разделы реестра для однократного запуска команд при входе в систему. Другими словами, прописанные там команды удаляются после выполнения. Когда-то эти разделы были популярным способом установки программ и даже драйверов. Каждый раздел предусмотрен в HKLM и HKCU - всего четыре расположения. Однако из коробки в реестре имеется только RunOnce в HKLM. Недавно волею случая я смотрел документацию и обнаружил пару любопытных статей: RunOnce Registry Key и KB2021405. Из первой следует, что поведение этих разделов изменилось еще в Windows Vista. Вторая была срочно опубликована в 2010 году, когда пропустившие Vista клиенты стали наступать на грабли в Windows 7 :) ❌ KB202140 несколько коряво гласит, что выполнение команд из этих разделов не работает в обычной учетной записи. Мол, так задумано. Действительно, если у пользователя нет прав администратора, логично улучшить UX и запретить ему напрочь эти команды... в HKLM! А в HKCU обычный пользователь обладает правами на запись. Зачем же лишать его возможности выполнять свои задачи однократно при входе? 👉 Я проверил работу обоих параметров при входе в систему на чистой Windows 11. Тестирование подтвердило мое предположение об HKCU и высветило две ошибки в статье: 1. RunOnce все-таки работает из HKCU обычного пользователя. Более того, клиент OneDrive с первого выпуска Windows 10 и по сей день использует этот раздел для самообслуживания 😎 2. RunOnceEx не работает в HKCU у администратора. Возможно, так было всегда, не помню уже. Похоже, при публикации статьи MSKB не разобрались и причесали все варианты под одну гребенку. Но тогда неточность в документации перевела вполне рабочий сценарий в разряд неподдерживаемых решений 🤷‍♂️ Ладно, допустим, вам требуется однократно запускать команды в рамках официально поддерживаемого решения. Нет проблем - создайте параметры с запуском команд в разделе Run (myCommand1, myCommand2) и добавьте их удаление в конце своей команды или скрипта. Remove-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" -Name *myCommand* ✌️