У меня есть приложение, которое обновляет программное обеспечение на локальной машине. Мне нужно, чтобы программное обеспечение обновлялось до входа пользователя в систему, и я прочитал, что запуск приложения через раздел RunServicesOnce
реестра, вероятно, является наиболее подходящим для этой цели.
Но я не могу найти этот ключ regedit
, и он не отображается в том же месте, что и ключ HKLM RunOnce в HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce
.
- Где находится этот ключ? То же самое в Windows XP \ Vista \ 7 \ 8 \ 8.1 \ 10 ?
- Как его использовать, есть ли какие-либо дополнительные параметры?
- Как определить пользователя, от имени которого запущено приложение? Запускается ли оно пользователем, создавшим ключ? Если
LocalSystem
ключ создает служба, будет ли оно запущено от имениLocalSystem
?
решение1
Где находится ключ реестра RunServicesOnce
У меня есть приложение, которое обновляет программное обеспечение на локальной машине. Мне нужно, чтобы программное обеспечение обновлялось до входа пользователя в систему
Запустить программу до входа пользователя в Windows 7
Если вы хотите, чтобы он запускался до входа пользователя в систему, вам придется запустить его как службу. Вот последовательность запуска основных ключей реестра, которая начинается сразу после чтения bootmgr и заканчивается записями ярлыков программ в двух папках автозагрузки.
- HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\BootExecute. Это может включать инструкции по планированию запуска chkdsk, но не пользовательских программ.
- Далее запускаются службы, за которыми следуют ключи реестра RunServicesOnce и RunServices (если они есть)
- Затем пользователь входит в систему.
- HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\UserInit. Это указывает на программу C:\WINDOWS\system32\userinit.exe, а запись заканчивается запятой. Другие программы можно запускать из этого ключа, добавляя их и разделяя запятой.
- HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Shell. Он должен содержать только одну запись, explorer.exe.
- Записи программ в этих 2 разделах реестра для ВСЕХ ПОЛЬЗОВАТЕЛЕЙ начинаются следующим образом: HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run и \RunOnce
- Записи программ в этих 2 разделах реестра для ТЕКУЩЕГО ПОЛЬЗОВАТЕЛЯ начинаются следующим образом: HKCU\Software\Microsoft\Windows\CurrentVersion\Run и \RunOnce
- Программы в папках автозагрузки всех пользователей и текущего пользователя запускаются в последнюю очередь.
Важные программы, такие как антивирус и брандмауэр, запускаются в начале последовательности как Службы. Значки, которые появляются в области уведомлений (внизу справа на экране), являются просто их пользовательскими интерфейсами, т. е. опциями и предпочтениями.
Дополнительным местоположением 32-разрядного программного обеспечения на 64-разрядном компьютере являются HKLM\SOFTWARE\Wow6432Node и HKCU.
Ключи запуска и порядок поиска
Доступ к реестру осуществляется еще до загрузки ядра NT, поэтому очень важно понимать, что компьютер настроен на загрузку при запуске. Следующий список ключей реестра осуществляется во время запуска системы в порядке их использования различными компонентами Windows:
- HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\BootExecute
- HKLM\System\CurrentControlSet\Services (начальное значение 0 указывает на драйверы ядра, которые загружаются до инициализации ядра)
- HKLM\System\CurrentControlSet\Services (начальное значение 2, автоматический запуск и 3, ручной запуск через SCM)
- HKLM\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce
- HKCU\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce
- HKLM\Software\Microsoft\Windows\CurrentVersion\RunServices
- HKCU\Software\Microsoft\Windows\CurrentVersion\RunServices
- HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Notify
- HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\Userinit
- HKCU\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\Shell
- HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\Shell
- HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\ShellServiceObjectDelayLoad
- HKLM\Software\Microsoft\Windows\CurrentVersion\RunOnce
- HKLM\Software\Microsoft\Windows\CurrentVersion\RunOnceEx
- HKLM\Software\Microsoft\Windows\CurrentVersion\Run
- HKCU\Software\Microsoft\Windows\CurrentVersion\Run
- HKCU\Software\Microsoft\Windows\CurrentVersion\RunOnce
- HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run
- HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run
- HKCU\Software\Microsoft\Windows NT\CurrentVersion\Windows\load
- HKLM\Software\Microsoft\Windows NT\CurrentVersion\Windows
- HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\SharedTaskScheduler (только XP, NT, W2k)
- HKLM\Software\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs
Примечание:Некоторые из этих ключей также отражены в HKLM\Software\wow6432node в системах, работающих на 64-битной архитектуре и с 64-битной версией Windows. Я не буду рассматривать каждый из них в этом посте.
Запускайте свою службу как учетную запись LocalSystem, если только учетной записи не требуется доступ к сетевым ресурсам, в этом случае вы создадите учетную запись службы домена, предоставите ей доступ к соответствующим ресурсам, а затем жестко закодируете ее учетные данные для запуска службы. На локальной машине у нее будут административные разрешения на все, и для учетных данных службы не потребуется никакого пароля.
Учетная запись LocalSystem
TheЛокальнаяСистемаучетная запись — это предопределенная локальная учетная запись, используемая менеджер по контролю услуг. Эта учетная запись не распознается подсистемой безопасности, поэтому вы не можете указать ее имя в вызове ПоискИмениУчетнойЗаписиФункция. Имеет обширные привилегии на локальном компьютере и действует как компьютер в сети. Его токен включаетNT AUTHORITY\СИСТЕМАиBUILTIN\АдминистраторыSID; эти учетные записи имеют доступ к большинству системных объектов. Имя учетной записи во всех локалях.\ЛокальнаяСистема. Имя,ЛокальнаяСистемаили ИмяКомпьютера\LocalSystemтакже может быть использован.У этой учетной записи нет пароля. Если вы укажете учетную запись LocalSystem при вызове СоздатьСервисилиИзменитьServiceConfigлюбая предоставленная вами информация о пароле игнорируется.