Windows 程序自启动实现方法详解
Windows 程序自启动实现方法详解
一、 Windows 启动项类
Windows启动项分为自启动程序与系统服务两大类,前者指操作系统启动时自动运行的应用程序,后者则涉及启动时激活的系统服务。本文聚焦后者的探讨。
二、脚本与命令介绍
脚本介绍
实现程序随Windows启动,需创建一个脚本(如cmd或bat文件),并编辑注册表。脚本任务包括:
- 验证安装状态:检查程序是否已设置自启动。
- 注册表修改:向注册表相应键添加程序路径以启用自启动,可选系统级、用户级或两者都设置:
系统级:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
用户级:HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
命令介绍
pushd
和popd
是Windows命令提示符中的两个命令,用于管理目录堆栈。
pushd将当前目录储存并切换到新目录;若无路径指定,则跳转到用户主目录:
pushd [路径]
popd
会从目录堆栈中删除最顶部的目录,撤销上次pushd操作,返回上一目录:
popd
三、脚本示例
编写服务脚本
编写一键启动程序服务的脚本,将以下文本内容保存为 .bat 文件,例如runServer.bat
@echo off
REM 设置当前目录为 bat 文件所在的目录
REM %~dp0 是一个批处理参数扩展,表示调用此批处理文件的完整路径(包括盘符和路径)
REM /d 参数允许同时改变驱动器盘符
cd /d %~dp0
REM 保存当前目录到栈中
pushd %CD%
REM 切换到 Redis 目录并启动
cd Redis-x64-5.0.14.1
start cmd /c redis-server.exe
popd
pushd %CD%
REM 切换到 MediaServer 目录并启动
cd camera\ZLMediaKit-master
start cmd /c MediaServer.exe
popd
pushd %CD%
REM 启动 ruoyi-admin.jar
start cmd /c "java -jar ruoyi-admin.jar"
REM 切换到 nginx 目录并启动
cd nginx-1.10.2
start cmd /c start.bat
popd
timeout /t 35 /nobreak
start http://localhost:90
REM 恢复原来的工作目录
popd
再编写一段批处理脚本stopServer.bat,可以一键停止这些服务:
taskkill /IM redis-server.exe /F
taskkill /IM MediaServer.exe /F
taskkill /F /IM nginx.exe > nul
taskkill /IM java.exe /F
将脚本添加进自启动项中
首先检查注册表中是否有名为 “My Application” 的项,如果没有,则将路径 “D:\Server\runServer.bat” 写入用户启动项中。
@echo off
REM 使用 chcp 命令来更改 cmd 窗口的字符编码
chcp 65001
setlocal EnableDelayedExpansion
set KEY_NAME=HKCU\Software\Microsoft\Windows\CurrentVersion\Run
set VALUE_NAME="My Application"
set VALUE_DATA=D:\Server\runServer.bat
REM 判断注册表项是否存在
reg query %KEY_NAME% /v %VALUE_NAME% >nul 2>&1
if %errorlevel% == 0 (
echo %VALUE_NAME% 已存在,不需要重复添加。
) else (
REM 将程序路径写入注册表
reg add %KEY_NAME% /v %VALUE_NAME% /t REG_SZ /d "%VALUE_DATA%" /f
if !errorlevel! == 0 (
echo "!VALUE_NAME!" 添加成功。
) else (
echo "!VALUE_NAME!" 添加失败,请检查权限。
)
)
pause
-
@echo off
表示关闭命令行窗口上的回显,使得在执行命令时不会在窗口上显示命令本身。 -
chcp 65001
表示更改 cmd 窗口的字符编码为 UTF-8,以便支持中文字符。 -
setlocal EnableDelayedExpansion
表示启用延迟环境变量扩展,即在命令行执行时才进行变量的解析。 -
set KEY_NAME=HKCU\Software\Microsoft\Windows\CurrentVersion\Run
表示要操作的注册表项,即当前用户的启动项。 -
set VALUE_NAME="My Application"
表示要添加的键名,即程序的名称。 -
set VALUE_DATA=D:\Server\runServer.bat
表示要添加的键值,即程序的路径。 -
reg query %KEY_NAME% /v %VALUE_NAME% >nul 2>&1
表示查询注册表项是否存在,如果存在则返回 0,否则返回非 0 值。 -
if %errorlevel% == 0
表示判断上一条命令的返回值是否为 0,即判断注册表项是否存在。 -
echo %VALUE_NAME% 已存在,不需要重复添加。
表示如果注册表项已经存在,则输出提示信息。 -
reg add %KEY_NAME% /v %VALUE_NAME% /t REG_SZ /d "%VALUE_DATA%" /f
表示将程序路径写入注册表,其中/v
表示键名,/t
表示键值类型,/d
表示键值数据,/f
表示强制覆盖已有的键值。 -
if !errorlevel! == 0
表示判断上一条命令的返回值是否为 0,即判断注册表项是否添加成功。 -
echo "!VALUE_NAME!" 添加成功。
表示如果注册表项添加成功,则输出提示信息。 -
echo "!VALUE_NAME!" 添加失败,请检查权限。
表示如果注册表项添加失败,则输出提示信息。 -
pause
表示暂停命令行窗口的执行,等待用户按下任意键继续。
删除自启动项
REM 使用 chcp 命令来更改 cmd 窗口的字符编码
chcp 65001
reg delete HKCU\Software\Microsoft\Windows\CurrentVersion\Run /v "My Application" /f
echo 删除成功
pause
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)