C#中如何设置软件开机自启动
以下是对提供的 C# 代码的详细说明和逐行注释。代码包含两个私有方法用于启用或禁用当前应用程序的 Windows 开机自启动功能。它们操作注册表项 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run因此需要管理员权限才能正常运行。SetThisAppAutoStartup() — 设置开机自启动privatevoidSetThisAppAutoStartup(){try{// 获取当前应用程序所在目录的完整路径并拼接可执行文件名 HikVision-SDK.exestringstrPathAndAppNameApplication.StartupPath\\HikVision-SDK.exe;// 检查该文件是否存在若不存在则直接返回避免无效注册表写入if(!File.Exists(strPathAndAppName))return;// 从完整路径中提取文件名例如 HikVision-SDK.exestringstrAppNamestrPathAndAppName.Substring(strPathAndAppName.LastIndexOf(\\)1);// 移除扩展名 .exe不区分大小写仅保留基本名称作为注册表项的名称strAppNamestrAppName.Replace(.exe,);strAppNamestrAppName.Replace(.EXE,);// 打开注册表路径HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run// 参数 true 表示需要写入权限RegistryKeyRKeyRegistry.LocalMachine.OpenSubKey(SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run,true);// 如果该子键不存在理论上通常存在则创建它if(RKeynull)RKeyRegistry.LocalMachine.CreateSubKey(SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run);// 在该子键下创建或更新一个值名称为应用程序名称不含扩展名值为完整的可执行文件路径// 这样系统在启动时会自动运行该程序RKey.SetValue(strAppName,strPathAndAppName);// 关闭注册表键释放资源RKey.Close();}catch{}// 空捕获忽略任何异常如权限不足、路径错误等}以下是优化后的代码privatevoidSetThisAppAutoStartup(){try{stringexePathApplication.ExecutablePath;if(!File.Exists(exePath))return;stringnamePath.GetFileNameWithoutExtension(exePath);using(varkeyRegistry.LocalMachine.OpenSubKey(SOFTWARE\Microsoft\Windows\CurrentVersion\Run,true)){key?.SetValue(name,exePath);}}catch(Exceptionex){/* 记录日志 */}}DelThisAppAutoStartup() — 删除开机自启动privatevoidDelThisAppAutoStartup(){try{// 获取当前正在运行的可执行文件的完整路径与 Set 方法中的路径可能不同但通常一致stringstrPathAndAppNameApplication.ExecutablePath;// 检查文件是否存在一般总是存在若不存在则返回if(!File.Exists(strPathAndAppName))return;// 从完整路径中提取文件名如 HikVision-SDK.exestringstrAppNamestrPathAndAppName.Substring(strPathAndAppName.LastIndexOf(\\)1);// 去掉扩展名获得用于注册表项的名称strAppNamestrAppName.Replace(.exe,);strAppNamestrAppName.Replace(.EXE,);// 打开注册表路径写入权限RegistryKeyRKeyRegistry.LocalMachine.OpenSubKey(SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run,true);// 如果子键不存在创建它但通常不会if(RKeynull)RKeyRegistry.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{stringexePathApplication.ExecutablePath;if(!File.Exists(exePath))return;stringnamePath.GetFileNameWithoutExtension(exePath);using(varkeyRegistry.LocalMachine.OpenSubKey(SOFTWARE\Microsoft\Windows\CurrentVersion\Run,true)){key?.DeleteValue(name,false);// false 表示值不存在时不抛出异常}}catch(Exceptionex){/* 记录日志 */}}

相关新闻

C++构建高性能HTTPS RESTful JSON服务器:从原理到工程实践

C++构建高性能HTTPS RESTful JSON服务器:从原理到工程实践

1. 项目概述:为什么我们需要一个C的HTTPS RESTful JSON服务器? 在嵌入式系统、高性能计算后端或者对资源消耗极其敏感的场景里,我们常常会面临一个选择:是用Python的Flask/Django、Java的Spring Boot,还是Node.js来快速…

2026/7/14 23:21:23阅读更多 →
HarmonyOS技术精讲-Camera Kit(相机服务)第2篇:开发环境与权限申请

HarmonyOS技术精讲-Camera Kit(相机服务)第2篇:开发环境与权限申请

HarmonyOS技术精讲-Camera Kit(相机服务)第2篇:开发环境与权限申请开篇:一个绕不开的坎 很多人第一次接触Camera Kit时,最容易在权限配置环节出问题。官方文档虽然清楚列出了需要的权限声明,但实际开发中&a…

2026/7/14 23:16:22阅读更多 →
HarmonyOS技术精讲-Camera Kit(相机服务)第1篇:Camera Kit概览与核心概念

HarmonyOS技术精讲-Camera Kit(相机服务)第1篇:Camera Kit概览与核心概念

HarmonyOS技术精讲-Camera Kit(相机服务)第1篇:Camera Kit概览与核心概念 一、开篇:Camera Kit到底解决了什么问题 HarmonyOS NEXT的相机开发里,很多开发者第一次接触Camera Kit时,会遇到一个尴尬的情况&a…

2026/7/14 23:16:22阅读更多 →
你以为 AI 在思考,其实它只是在猜下一个词?真相没那么简单

你以为 AI 在思考,其实它只是在猜下一个词?真相没那么简单

“大模型不就是自动补全吗?”这句话既抓住了核心,又很容易把人带偏。它确实通过预测下一个词元来训练和生成,但“训练目标简单”不等于“最终能力简单”。就像钢琴只有有限的琴键,却能演奏完全不同的作品;理解 AI&…

2026/7/15 0:26:31阅读更多 →
【ABAP】转换例程解析:从定义到应用,一篇就够了

【ABAP】转换例程解析:从定义到应用,一篇就够了

目录 前言 一、什么是转换例程? 为什么需要转换例程? 二、例程在哪里定义? 如何找到它? 表级查询方式 三、如何发现代码中的转换例程? 四、如何在程序中强制使用/调用(应用)转换例程&am…

2026/7/15 0:26:31阅读更多 →
【限时解密】ChatGPT私域社群GMV提升217%的底层逻辑:基于27个真实社群的NLP情感分析报告

【限时解密】ChatGPT私域社群GMV提升217%的底层逻辑:基于27个真实社群的NLP情感分析报告

更多请点击: https://codechina.net 第一章:【限时解密】ChatGPT私域社群GMV提升217%的底层逻辑:基于27个真实社群的NLP情感分析报告 通过对27个垂直行业(教育、SaaS、跨境电商、知识付费等)的活跃ChatGPT私域社群进行…

2026/7/15 0:26:31阅读更多 →
Copilot团队管理功能落地全图谱(从权限配置到效能看板):微软内部PM未公开的7条黄金规则

Copilot团队管理功能落地全图谱(从权限配置到效能看板):微软内部PM未公开的7条黄金规则

更多请点击: https://codechina.net 第一章:Copilot团队管理功能全景概览 GitHub Copilot 的团队管理功能为组织级开发协作提供了统一策略配置、成员权限控制与使用洞察分析能力,覆盖从开发者准入到资源配额分配的全生命周期管理。该功能依托…

2026/7/15 0:26:31阅读更多 →
计算机考试-n叉树节点度易混淆—东方仙盟

计算机考试-n叉树节点度易混淆—东方仙盟

n0​:度 0,叶子节点(无孩子)n1​:度 1,只有左孩子 或 只有右孩子n2​:度 2,同时有左、右孩子公式 1(总节点)Nn0​n1​n2​公式 2(重中之重&#x…

2026/7/15 0:26:31阅读更多 →
3步学会岛屿设计:从零开始创建你的梦想岛屿

3步学会岛屿设计:从零开始创建你的梦想岛屿

3步学会岛屿设计:从零开始创建你的梦想岛屿 【免费下载链接】HappyIslandDesigner "Happy Island Designer (Alpha)",是一个在线工具,它允许用户设计和定制自己的岛屿。这个工具是受游戏《动物森友会》(Animal Crossing)启发而创建…

2026/7/15 0:21:31阅读更多 →
VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异当你在VSCode中启动一个新的TypeScript项目时,第一个技术决策往往从安装方式开始。这个看似简单的选择——全局安装还是项目本地安装——实际上会深刻影响你的开发流程、团队协作和…

2026/7/14 4:56:14阅读更多 →
智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手 【免费下载链接】zhihuishu 智慧树刷课插件,自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 智慧树刷课插件是一款专为智慧树在线教育平台设计的Chrome浏…

2026/7/14 2:55:05阅读更多 →
Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 你是否在GOG或Epic Games Store购买了心仪的游戏…

2026/7/14 6:17:41阅读更多 →
AI框架决定企业AI能走多远

AI框架决定企业AI能走多远

企业AI建设的第一性原理 企业搞AI,最关键的决定是什么?不是选哪家大模型,不是先做哪个场景,不是招多少AI人才——而是选哪个AI开发框架。 为什么?因为框架决定了企业AI能力的"天花板"。选对了框架&#xff0…

2026/7/15 0:01:30阅读更多 →
Java企业为什么需要AI框架

Java企业为什么需要AI框架

Java企业在AI时代的尴尬处境 Java是全球企业级应用开发的主流语言——全球超过一半的企业系统跑在Java上。但在AI浪潮面前,很多Java企业感到尴尬:大模型的接口是各种语言的,AI开发社区以其他语言为主流,似乎Java在AI时代"掉队…

2026/7/15 0:01:30阅读更多 →
CC3230x嵌入式开发实战:SD主机、定时器与低功耗模式深度解析

CC3230x嵌入式开发实战:SD主机、定时器与低功耗模式深度解析

1. 项目概述:为什么需要关注CC3230x的SD主机、定时器与低功耗?在物联网和嵌入式设备开发领域,我们常常面临一个核心矛盾:设备需要具备强大的连接能力、可靠的数据存储和实时控制功能,同时又必须严格控制功耗以延长电池…

2026/7/15 0:01:30阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/14 15:07:30阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/14 4:45:36阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/14 2:42:17阅读更多 →