Windows 程序自启动实现方法详解

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: Windows 程序自启动实现方法详解

在 Windows 操作系统中,我们经常需要将某些程序设置为开机自启动,以便在系统启动后自动运行。这对于一些常用的应用程序来说非常方便,可以减少用户手动启动程序的时间和操作步骤。本文将详细介绍如何通过 cmd 或者 bat 文件将一个程序写入注册表,让它开机自启动。

一、了解 Windows 自启动机制

在 Windows 操作系统中,启动项分为两类:自启动项和启动服务。自启动项是指在 Windows 启动时自动启动的程序或应用程序,而启动服务则是指在 Windows 启动时自动启动的系统服务。在本文中,我们主要讨论如何实现 Windows 自启动项的功能。

二、编写自启动脚本

要实现程序自启动的功能,我们需要编写一个自启动脚本,将其添加到 Windows 注册表中。这个脚本可以是一个 cmd 或者 bat 文件,其内容应该包含以下几个步骤:

  1. 检查程序是否已经安装

在脚本中,我们需要先检查程序是否已经安装。如果程序已经安装,则不需要再次添加自启动项。

  1. 添加自启动项

如果程序没有安装自启动项,我们需要将程序的路径添加到 Windows 注册表中。具体来说,我们需要添加以下两个键值:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run

这两个键值分别对应于系统级别和用户级别的自启动项。我们可以根据实际需要选择其中一个或者同时添加。

  1. 检查程序是否添加成功

添加自启动项后,我们需要再次检查程序是否成功添加到自启动项中。如果添加失败,则需要进行错误处理。

三、脚本示例

pushdpopd是Windows命令提示符中的两个命令,它们用于在命令提示符中管理目录堆栈。

pushd命令会将当前目录推入堆栈中,并将指定的目录设置为当前目录。如果不指定路径,则pushd会将当前目录推入堆栈中,并将当前目录更改为用户的主目录。语法如下:

pushd [路径]

popd命令会从目录堆栈中删除最顶部的目录,并将当前目录更改为该目录。popd命令不需要任何参数。语法如下:

popd

这两个命令通常与cd命令一起使用,以便在不同的目录之间快速切换。例如,您可以使用pushd命令进入一个目录,然后使用cd命令在该目录中进行操作。完成后,您可以使用popd命令返回到之前的目录。

以下是一个示例脚本,用于将一个程序添加到 Windows 的自启动项中,将以下文本内容保存为 .bat 文件,例如runServer.bat

@echo off
REM 设置当前目录为 bat 文件所在的目录
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

在这个示例脚本中,我们将程序的路径设置为 D:\Server\runServer.bat,将其添加到了当前用户的自启动项中。这段代码会检查注册表中是否已经存在名为 “My Application” 的键值对,如果不存在则将你的程序路径写入注册表中。如果添加成功,会输出 “My Application 添加成功。” 的提示信息,否则会输出 “My Application 添加失败,请检查权限。” 的提示信息。

@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

这段代码是一个批处理文件(bat 文件),主要实现的功能是将一个程序写入注册表,让它开机自启动。下面是代码的详细解释:

  1. @echo off 表示关闭命令行窗口上的回显,使得在执行命令时不会在窗口上显示命令本身。
  2. chcp 65001 表示更改 cmd 窗口的字符编码为 UTF-8,以便支持中文字符。
  3. setlocal EnableDelayedExpansion 表示启用延迟环境变量扩展,即在命令行执行时才进行变量的解析。
  4. set KEY_NAME=HKCU\Software\Microsoft\Windows\CurrentVersion\Run 表示要操作的注册表项,即当前用户的启动项。
  5. set VALUE_NAME="My Application" 表示要添加的键名,即程序的名称。
  6. set VALUE_DATA=D:\Server\runServer.bat 表示要添加的键值,即程序的路径。
  7. reg query %KEY_NAME% /v %VALUE_NAME% >nul 2>&1 表示查询注册表项是否存在,如果存在则返回 0,否则返回非 0 值。
  8. if %errorlevel% == 0 表示判断上一条命令的返回值是否为 0,即判断注册表项是否存在。
  9. echo %VALUE_NAME% 已存在,不需要重复添加。 表示如果注册表项已经存在,则输出提示信息。
  10. reg add %KEY_NAME% /v %VALUE_NAME% /t REG_SZ /d "%VALUE_DATA%" /f 表示将程序路径写入注册表,其中 /v 表示键名,/t 表示键值类型,/d 表示键值数据,/f 表示强制覆盖已有的键值。
  11. if !errorlevel! == 0 表示判断上一条命令的返回值是否为 0,即判断注册表项是否添加成功。
  12. echo "!VALUE_NAME!" 添加成功。 表示如果注册表项添加成功,则输出提示信息。
  13. echo "!VALUE_NAME!" 添加失败,请检查权限。 表示如果注册表项添加失败,则输出提示信息。
  14. pause 表示暂停命令行窗口的执行,等待用户按下任意键继续。

四、删除自启动项

如果你想要删除这个注册表项,可以使用以下命令,这个命令会强制删除名为 “My Application” 的键值对,即使它不存在也不会报错。

REM 使用 chcp 命令来更改 cmd 窗口的字符编码
chcp 65001 
reg delete HKCU\Software\Microsoft\Windows\CurrentVersion\Run /v "My Application" /f
echo 删除成功
pause


相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
6天前
|
XML C# 数据格式
掌握了在Windows平台上查看DLL依赖的方法
掌握了在Windows平台上查看DLL依赖的方法
48 4
|
10天前
|
人工智能 JavaScript 网络安全
ToB项目身份认证AD集成(三完):利用ldap.js实现与windows AD对接实现用户搜索、认证、密码修改等功能 - 以及针对中文转义问题的补丁方法
本文详细介绍了如何使用 `ldapjs` 库在 Node.js 中实现与 Windows AD 的交互,包括用户搜索、身份验证、密码修改和重置等功能。通过创建 `LdapService` 类,提供了与 AD 服务器通信的完整解决方案,同时解决了中文字段在 LDAP 操作中被转义的问题。
|
13天前
|
弹性计算 数据安全/隐私保护 Windows
阿里云国际版无法远程连接Windows服务器的排查方法
阿里云国际版无法远程连接Windows服务器的排查方法
|
2月前
|
Windows Python
python获取windows机子上运行的程序名称
python获取windows机子上运行的程序名称
|
2月前
|
存储 开发者 Windows
WINDOWS 环境变量设置方法
本文旨在帮助使用Windows电脑的开发者们为其设备配置环境变量,以更好地支持大模型应用的开发工作。文中详细介绍了三种配置方法:一是将环境变量设置为系统级变量;二是在命令行界面通过`SET`命令或`PowerShell`临时设置变量;三是借鉴MAC的方式,创建全局环境变量文件`.zshrc`进行配置。这些方法简单实用,便于根据实际需求选择适合的方式进行配置。
|
19天前
|
安全 Windows
Windows系统实现exe服务注册的方法都有哪些?
【10月更文挑战第5天】Windows系统实现exe服务注册的方法都有哪些?
153 0
|
22天前
|
数据可视化 程序员 C#
C#中windows应用窗体程序的输入输出方法实例
C#中windows应用窗体程序的输入输出方法实例
17 0
|
23天前
|
安全 API C#
C# 如何让程序后台进程不被Windows任务管理器强制结束
C# 如何让程序后台进程不被Windows任务管理器强制结束
46 0
|
24天前
|
网络协议 安全 调度
关闭Windows自动更新的6种方法
本文介绍了六种关闭Windows自动更新的方法,包括使用服务管理器、组策略编辑器、修改注册表、任务计划程序、网络连接设置和命令行。
547 0
|
2月前
|
安全 网络安全 API
基于WMI更新Windows系统信息采集程序sysInfo的一些收获
基于WMI更新Windows系统信息采集程序sysInfo的一些收获