当前位置: 首页 > news >正文

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

以下是对提供的 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){/* 记录日志 */}}
http://www.jsqmd.com/news/1190011/

相关文章:

  • 泾川卖黄金别踩坑!三大本土合规回收门店全实测,报价透明无隐形扣费 - 福金阁黄金回收
  • TB67H480FNG与MSP432P401R电机控制方案详解
  • 紧急更新!Copilot v2.4测试生成引擎重大升级,这5个模板必须立即迁移(附兼容性检测脚本)
  • 2026东莞企业AI转型机构排名(附本地落地变现渠道) - 资讯纵览
  • VSCode 2026 新特性与 AI 智能配置指南(超详细)
  • 奇富科技正式开源ModelEvo 以自动建模能力参与行业基础建设
  • 元初混沌 6G 全域通感一体化体系架构 第一卷二阶第二十篇 移动终端跨层级快速适配机制
  • Linux内核调试利器:ftrace原理与应用详解
  • DeepSeek API成本优化:Codex工具链实现80%成本节省方案
  • 肃州旧金变现避坑指南!三大实体连锁全城覆盖,无损检测当场全款结算 - 福金阁黄金回收
  • 2026生成式引擎优化(GEO)方案选择指南:五大服务商硬核实力测评 - 资讯纵览
  • OpenViking:AI Agent上下文工程与自我进化技术解析
  • 伯爵中国售后电话腕表维修保养服务热线权威公示(2026年7月最新) - 亨得利官方服务中心
  • 044-刻意练习的时间规划
  • 【IOS逆向】麦当劳保姆级分析过程
  • 计算机系统安全实验:栈帧结构与缓冲区溢出漏洞利用
  • 避坑式网安路线!90%新人都会学错的10个顺序,看完少走一年弯路
  • 从Q250机架到妙算/NX:拆解FAST-Lab 250mm自主无人机硬件选型逻辑
  • Dify Agent模式配置必须在24小时内完成的3项合规加固(GDPR/等保2.0双标适配实录)
  • 【冷冻电镜】IMOD实战:从零构建双轴断层图(Etomo全流程解析)
  • 车型识别 车型检测数据集 suv识别 车辆计数 面包车检测
  • 北京产检、孕期就诊不方便?正规头部陪诊守嘉陪诊,专属孕期温和陪护服务 - 深鉴新闻
  • AI 检索品牌可见度提升方案:五大GEO服务商实力全景 - 资讯纵览
  • 2026界面清爽八字排盘工具怎么选:看字段层级、模块显隐和广告干扰
  • 模板驱动文档自动化:结构化内容复用与智能渲染实战
  • PixWorld:像素空间3D场景生成与重建统一框架实践指南
  • Gitee 企业版测试管理流程优化:四大模块闭环能力再提升
  • Ollama API尚未公开的调试模式启用方法(隐藏flag --verbose=3实测有效),仅限前1000名开发者知晓
  • TLA2518与STM32F745VG的ADC系统设计与优化
  • 微信小程序web-view组件开发实战与优化指南