尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

C#中如何设置软件开机自启动

C#中如何设置软件开机自启动
📅 发布时间:2026/7/14 23:22:25

以下是对提供的 C# 代码的详细说明和逐行注释。代码包含两个私有方法,用于启用或禁用当前应用程序的 Windows 开机自启动功能。它们操作注册表项 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run,因此需要管理员权限才能正常运行。

SetThisAppAutoStartup() — 设置开机自启动

privatevoidSetThisAppAutoStartup(){try{// 获取当前应用程序所在目录的完整路径,并拼接可执行文件名 "HikVision-SDK.exe"stringstrPathAndAppName=Application.StartupPath+"\\HikVision-SDK.exe";// 检查该文件是否存在,若不存在则直接返回,避免无效注册表写入if(!File.Exists(strPathAndAppName))return;// 从完整路径中提取文件名(例如 "HikVision-SDK.exe")stringstrAppName=strPathAndAppName.Substring(strPathAndAppName.LastIndexOf("\\")+1);// 移除扩展名 ".exe"(不区分大小写),仅保留基本名称作为注册表项的名称strAppName=strAppName.Replace(".exe","");strAppName=strAppName.Replace(".EXE","");// 打开注册表路径:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run// 参数 true 表示需要写入权限RegistryKeyRKey=Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run",true);// 如果该子键不存在(理论上通常存在),则创建它if(RKey==null)RKey=Registry.LocalMachine.CreateSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run");// 在该子键下创建或更新一个值,名称为应用程序名称(不含扩展名),值为完整的可执行文件路径// 这样系统在启动时会自动运行该程序RKey.SetValue(strAppName,strPathAndAppName);// 关闭注册表键,释放资源RKey.Close();}catch{}// 空捕获,忽略任何异常(如权限不足、路径错误等)}

以下是优化后的代码

privatevoidSetThisAppAutoStartup(){try{stringexePath=Application.ExecutablePath;if(!File.Exists(exePath))return;stringname=Path.GetFileNameWithoutExtension(exePath);using(varkey=Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run",true)){key?.SetValue(name,exePath);}}catch(Exceptionex){/* 记录日志 */}}

DelThisAppAutoStartup() — 删除开机自启动

privatevoidDelThisAppAutoStartup(){try{// 获取当前正在运行的可执行文件的完整路径(与 Set 方法中的路径可能不同,但通常一致)stringstrPathAndAppName=Application.ExecutablePath;// 检查文件是否存在(一般总是存在),若不存在则返回if(!File.Exists(strPathAndAppName))return;// 从完整路径中提取文件名(如 "HikVision-SDK.exe")stringstrAppName=strPathAndAppName.Substring(strPathAndAppName.LastIndexOf("\\")+1);// 去掉扩展名,获得用于注册表项的名称strAppName=strAppName.Replace(".exe","");strAppName=strAppName.Replace(".EXE","");// 打开注册表路径(写入权限)RegistryKeyRKey=Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run",true);// 如果子键不存在,创建它(但通常不会)if(RKey==null)RKey=Registry.LocalMachine.CreateSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run");// 注意:下面两行代码存在冗余和潜在错误// RKey.SetValue(strAppName, false); // 这行会设置一个名为 strAppName 的项,值为 false(类型为字符串?),但这不会删除自启动,反而会写入错误数据// RKey.DeleteSubKey(strAppName, false); // 错误:DeleteSubKey 用于删除子键,而不是删除值。这里 strAppName 是值名称,应使用 DeleteValue。// 正确的做法应该是:RKey.DeleteValue(strAppName, false); 其中 false 表示不抛出异常如果值不存在// 上述代码意图是删除该值,但实现有误。修正后的写法应为:// try { RKey.DeleteValue(strAppName, false); } catch { }// 由于原代码有误,以下注释说明实际执行情况:// - SetValue 会写入一个错误的值(非字符串,类型为 String,值为 "False")// - DeleteSubKey 会尝试删除名为 strAppName 的子键,但该名称通常不是子键而是值,因此会失败(但被 catch 忽略)// 结果:该自启动项不会被正确删除。// 尽管如此,代码依然关闭了注册表键RKey.Close();}catch{}// 忽略所有异常}

以下是优化后的方法

privatevoidDelThisAppAutoStartup(){try{stringexePath=Application.ExecutablePath;if(!File.Exists(exePath))return;stringname=Path.GetFileNameWithoutExtension(exePath);using(varkey=Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run",true)){key?.DeleteValue(name,false);// false 表示值不存在时不抛出异常}}catch(Exceptionex){/* 记录日志 */}}

相关新闻

  • 043-如何设定有效的练习目标
  • Linux内核调试利器:ftrace原理与应用详解
  • 元初混沌 6G 全域通感一体化体系架构 第一卷二阶第二十篇 移动终端跨层级快速适配机制

最新新闻

  • 2026年十万级无尘车间服务机构评测与精选推荐 - 奔跑123
  • 2026年上海污水提升器推荐 不同场景选型思路分享参考 - 奔跑123
  • RTMDet 自定义目标检测训练实战:MMYOLO 训练、评估与可视化
  • 亨得利官方钟表服务中心|官方热线和门店地址权威信息公告(2026年7月更新) - 亨得利官方
  • FastSAM 图像分割实战:自动 Mask、框提示、点提示与文本提示
  • 工业洗地机靠谱厂家判定指南 资质与实绩双维度解析 - 奔跑123

日新闻

  • 告别启动盘残留:用Diskpart彻底清除U盘EFI分区与恢复完整空间
  • 2026 年宜春诚信的塑料缠绕膜厂家哪个好,缠绕膜背后的秘密:你不知道的成本陷阱 - 领域鉴赏官
  • Arch ECS 入门指南:10分钟掌握C#高性能数据驱动架构

周新闻

  • IX9104 PCIe5.0 高速交换芯片@ACP#完整规格 + 应用场景总结
  • Unity游戏集成Coze智能体:实现NPC智能对话与知识库联动
  • SAP EPIC 建行回单查询:从标准类CL_EPIC_EXAMPLE_CN_CCB_GHTD到Z类的5处关键修改

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号