我有一个应用程序可以更新本地计算机上的软件。我需要在用户登录之前更新软件,并且了解到通过注册表项运行应用程序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。
- 所有用户的这两个注册表项中的程序条目接下来开始:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run 和 \RunOnce
- 当前用户的这两个注册表项中的程序条目接下来启动:HKCU\Software\Microsoft\Windows\CurrentVersion\Run 和 \RunOnce
- 所有用户和当前用户的启动文件夹中的程序最后启动。
防病毒和防火墙等重要程序在序列中以服务形式提前启动。通知区域(屏幕右下角)中显示的图标只是它们的用户界面,即选项和首选项。
64 位计算机中 32 位软件的附加位置是 HKLM\SOFTWARE\Wow6432Node 和 HKCU。
运行键和搜索顺序
注册表甚至在加载 NT 内核之前就被访问,因此了解计算机在启动时配置为加载的内容非常重要。以下注册表项列表在系统启动期间按不同 Windows 组件的使用顺序进行访问:
- HKLM\SYSTEM\CurrentControlSet\控制\会话管理器\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\软件\微软\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\软件\微软\Windows NT\CurrentVersion\Windows
- HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\SharedTaskScheduler(仅限 XP、NT、W2k)
- HKLM\Software\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs
笔记:在运行 64 位架构和 64 位 Windows 版本的系统上,其中一些键也反映在 HKLM\Software\wow6432node 下。我不会在这篇文章中逐一介绍这些内容。
以 LocalSystem 帐户运行您的服务,除非该帐户需要访问网络资源,此时您需要创建一个域服务帐户,授予其访问适用资源的权限,然后硬编码其凭据以供服务以该帐户运行。在本地计算机上,它将拥有所有内容的管理权限,并且不需要任何服务凭据密码。
本地系统帐户
这本地系统account 是预定义的本地帐户,由 服务控制管理器。安全子系统无法识别此帐户,因此您无法在调用 查找帐户名称功能。它在本地计算机上拥有广泛的权限,并充当网络上的计算机。其令牌包括NT 权限\系统和内置\管理员SID;这些帐户可以访问大多数系统对象。所有区域设置中的帐户名称都是.\本地系统。 名字,本地系统或者 计算机名\本地系统也可以使用。此帐户没有密码。如果您在调用中指定 LocalSystem 帐户 创建服务或者变更服务配置功能,您提供的任何密码信息都会被忽略。