简介
在很多情况下,我们期望自己的程序,能够跟随操作系统运行。操作系统也提供了一些常规的
开机自启动的方法,比如特定的注册表和特定的文件夹等,下边依次进行介绍
工作原理
1.注册表RUN
系统在注册表中提供随着 用户登录 而运行的RUN键值,包含如下位置
1 | HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run |
1 | HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run |
在 HKEY_LOCAL_MACHINE 里的是针对 所有用户 的配置,在 HKEY_CURRENT_USER 里的是
针对 当前用户 的配置,其中 RunOnce 的配置在启动过一次后就会自行删除
注:该方法涉及到 提升UAC权限 运行的程序会失败
2.文件夹启动
在系统开时菜单中提供了随着 用户登录 而运行的启动目录,包含如下位置
1 | C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp |
其中 ProgramData 目录下的是针对 所有用户 的配置
注:该方法涉及到 提升UAC权限 运行的程序会失败
3.注册表Userinit
在如下注册表的位置存在一个 Userinit 值,数据为 C:\Windows\system32\userinit.exe,
注意结尾的逗号,这里我们可以添加自己的程序,在 用户登录 时就会跟随一起启动
1 | HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon |
注:该方法涉及到 提升UAC权限 运行的程序会失败
3.计划任务
在操作系统计划任务配置中,可以设置是 用户登录 时运行,还是 系统启动 时运行,
同时还可以设置是否以 管理员权限 运行,如下图所示

或者使用CMD命令进行设置
1 | schtasks /Create /SC ONLOGON /RL HIGHEST /F /TN "TaskName" /TR "TaskExePath" // 创建 |
4.服务
程序注册成服务后可以在 启动类型 中设置成随系统启动,并且使用的 SYSTEM 权限,但是由于服务
是在 会话0 中运行,无法展示UI界面,所以需要先检测 用户登录 后再从 会话1 中启动带UI程序

其中 Start 为 2 时表示随系统启动