我们有想要在登录过程的早期运行的软件。该软件会修改或隐藏用户桌面的某些元素,并且用户永远不应该看到未修改的桌面。
现在,在 Windows 7 上,只需通过自动启动启动该软件即可;显示桌面时该软件已经处于活动状态。
但是对于 Windows 10,该软件是在桌面首次显示后几秒钟启动的,因此对于我们的目的来说太晚了。
有没有办法可以提早启动软件或者延迟桌面?
PS:我们正在制作类似自助服务终端的嵌入式机器,所以我们确实想这样做。
答案1
从这个 stackoverflow 问题,最好的办法是将程序作为服务运行。一种选择是使用国家安全监测中心答案中的相关部分:
Windows 7的正常启动顺序是:
- 开机自检 (POST) 阶段
- 初始启动阶段
- Windows 启动管理器阶段
- Windows 启动加载程序阶段
- 内核加载阶段
- 登录阶段
内核加载阶段 Windows 引导加载程序负责将 Windows 内核 (
Ntoskrnl.exe
) 和 HAL 加载到内存中。内核和 HAL 一起初始化一组称为 Windows 执行程序的软件功能。Windows 执行程序处理存储在注册表中的配置信息并HKLM\SYSTEM\CurrentControlSet
启动服务和驱动程序。以下部分提供有关内核加载阶段的更多详细信息。登录阶段
Windows 子系统启动
Winlogon.exe
,这是一项使您能够登录和注销的系统服务。Winlogon.exe
然后执行以下操作:
- 启动服务子系统 (
Services.exe
),也称为 SCM。SCM 初始化注册表项 Start 在注册表子项 中指定为自动加载的服务HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Servicename
。- 启动本地安全机构 (LSA) 进程 (
Lsass.exe
)。- 在开始登录提示符下解析 ++ 组合键(如果计算机是 AD DS 域的一部分)Ctrl。AltDelete
登录用户界面 (LogonUI) 功能和凭据提供程序(可以是标准凭据提供程序或第三方凭据提供程序)收集用户名和密码(或其他凭据),并将此信息安全地传递给 LSA 进行身份验证。如果用户提供了有效的凭据,则使用默认的 Kerberos V 5 身份验证协议或 Windows NT LAN Manager (NTLM) 授予访问权限。
Winlogon 初始化安全和身份验证功能,而 PnP 初始化自动加载服务和驱动程序。用户登录后,注册表项
LastKnownGood
(位于HKLM\SYSTEM\Select
)引用的控件集将使用子项中的内容进行更新CurrentControlSet
。默认情况下,Winlogon 随后启动Userinit.exe
Windows 资源管理器外壳。Userinit 随后可能会启动其他进程,包括:
- 组策略设置生效适用于用户和计算机的组策略设置生效。
启动程序运行当未被组策略设置覆盖时,Windows 将启动以下注册表子项和文件系统文件夹中引用的登录脚本、启动程序和服务:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Runonce HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows\Run HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce SystemDrive\Documents and Settings\All Users\Start Menu\Programs\Startup SystemDrive\Documents and Settings\username\Start Menu\Programs\Startup
安装 Windows 后,可能会将多个应用程序配置为默认启动,其中包括 Windows Defender。计算机制造商或 IT 部门可能会配置其他启动应用程序。
直到用户成功登录计算机后,Windows 启动才算完成。如果在登录阶段启动失败,则说明配置为自动启动的服务或应用程序存在问题。