0%

实现开机自启动的方法(1)

简介

在很多情况下,我们期望自己的程序,能够跟随操作系统运行。操作系统也提供了一些常规的
开机自启动的方法,比如特定的注册表和特定的文件夹等,下边依次进行介绍

工作原理

1.注册表RUN

系统在注册表中提供随着 用户登录 而运行的RUN键值,包含如下位置

1
2
3
4
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Run
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\RunOnce
1
2
3
4
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce
HKEY_CURRENT_USER\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Run
HKEY_CURRENT_USER\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\RunOnce

HKEY_LOCAL_MACHINE 里的是针对 所有用户 的配置,在 HKEY_CURRENT_USER 里的是
针对 当前用户 的配置,其中 RunOnce 的配置在启动过一次后就会自行删除

注:该方法涉及到 提升UAC权限 运行的程序会失败

2.文件夹启动

在系统开时菜单中提供了随着 用户登录 而运行的启动目录,包含如下位置

1
2
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp
C:\Users\用户名\AppData\Roaming\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
2
schtasks /Create /SC ONLOGON /RL HIGHEST /F /TN "TaskName" /TR "TaskExePath" // 创建
schtasks /Delete /F /TN "TaskName" // 删除
4.服务

程序注册成服务后可以在 启动类型 中设置成随系统启动,并且使用的 SYSTEM 权限,但是由于服务
是在 会话0 中运行,无法展示UI界面,所以需要先检测 用户登录 后再从 会话1 中启动带UI程序

创建服务

其中 Start2 时表示随系统启动