news 2026/7/14 23:20:53

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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){/* 记录日志 */}}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/14 23:19:58

Windows C盘清理全攻略:从手动操作到自动化工具释放磁盘空间

在 Windows 系统长期使用过程中,C 盘空间不足是困扰许多用户的常见问题。系统更新残留、临时文件堆积、应用缓存膨胀等因素会迅速吞噬宝贵的磁盘空间,导致系统运行缓慢、软件安装失败甚至系统崩溃。手动清理不仅效率低下,还可能误删关键文件。…

作者头像 李华
网站建设 2026/7/14 23:17:56

工业负载控制:TPD2017FN与PIC18LF45K50的智能解决方案

1. 工业负载控制的核心挑战与方案选型在工业自动化现场,电感和电阻负载的控制一直是工程师面临的棘手问题。去年我在某汽车零部件生产线升级项目中,就曾遇到过电磁阀频繁烧毁的故障——这正是由于感性负载的反电动势没有得到妥善处理。经过多次试验&…

作者头像 李华
网站建设 2026/7/14 23:16:25

跨平台实战:在C/C++、Python与C#中高效集成CH347DLL驱动

1. CH347DLL驱动集成概述 CH347作为一款多功能USB转接芯片,支持JTAG/SPI/I2C/GPIO/UART等多种接口协议,在嵌入式开发和硬件调试中应用广泛。但很多开发者首次接触其DLL驱动集成时,常会遇到环境配置复杂、跨平台兼容性差等问题。我在实际项目中…

作者头像 李华
网站建设 2026/7/14 23:15:48

iNeuOS Vision Detect:工业视觉模型全生命周期管理平台

1. 项目概述:iNeuOS Vision Detect平台定位与核心价值在工业4.0和智能制造浪潮下,机器视觉技术正从单点检测向系统化应用快速演进。iNeuOS Vision Detect作为工业级视觉模型全生命周期管理平台,解决了传统视觉系统"模型开发碎片化、部署…

作者头像 李华
网站建设 2026/7/14 23:13:40

为什么你需要Topit:3个技巧彻底掌握macOS窗口置顶神器

为什么你需要Topit:3个技巧彻底掌握macOS窗口置顶神器 【免费下载链接】Topit Pin any window to the top of your screen / 在Mac上将你的任何窗口强制置顶 项目地址: https://gitcode.com/gh_mirrors/to/Topit 你是否曾经在macOS上工作时,因为频…

作者头像 李华
网站建设 2026/7/14 23:08:13

Docker构建时外网访问配置与优化指南

1. Docker构建时连接外网的核心需求解析 在Docker容器构建过程中,经常需要从外部网络下载依赖包或访问远程资源。默认情况下,docker build命令会在隔离的网络环境中执行构建步骤,这可能导致以下典型问题: 构建过程中apt-get upda…

作者头像 李华