C#应用在Windows实现自启动

本文将讲解 C# 应用在 Windows 系统中通过自动设置注册表的形式的形式实现开机自启动,这也是 Windows 系统推荐的做法。

关键点

Windows系统上实现开机自启动,我们可以采用注册表来完成,对应的注册表键为 前缀\SOFTWARE\Microsoft\Windows\CurrentVersion\Run,其中的前缀部分对应了应用的启动权限,在注册表中主要有两个重要的前缀,一个是本地主机,键名为:HKEY_LOCAL_MACHINE,另一个是当前用户,键名为:HKEY_CURRENT_USER,当我们把内容注册到当前用户键下时,如果以其他用户登录系统是无法正确访问数据的,所以如果我们想要为机器上所有用户都保留访问权限时,就需要把内容注册到本机主机这个键下面。

实现

我们使用 dotnet 自带的 RegistryKey 来操作注册表,注意这时候程序需要管理员权限或者更高权限才能正常运行,否则会出错。

首先是找到对应的键,然后设添加一个键值,键名为软件的名称,内容为应用的具体路径具体,当我们添加完成后,可以在任务管理器或者设置中的启动项管理中看到我们刚设置的自启动软件。

代码如下:

var exeName = "我的软件";
var path = "软件路径";
RegistryKey local = Registry.LocalMachine;
RegistryKey key = local.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run", true);
if (key == null)
{
    local.CreateSubKey("SOFTWARE//Microsoft//Windows//CurrentVersion//Run");
}
//若开机自启动则添加键值对
if (isStart)
{
    // 注意这里需要给内容加上双引号,防止出错
    key.SetValue(exeName, $"\"{path}\"");
    key.Close();
}
else//否则删除键值对
{
    string[] keyNames = key.GetValueNames();
    foreach (string keyName in keyNames)
    {
        if (keyName.ToUpper() == exeName.ToUpper())
        {
            key.DeleteValue(exeName);
            key.Close();
        }
    }
}
发布时间:2023-03-18
其他阅读

记录中文名WPF应用无法启动

今年开春,突然就收到部分用户反馈软件无法启动的问题,沟通后远程查看发现应用刚启动就直接崩溃了,在Windows的事件查看器可以看到应用的崩溃日志,发现是 ucrtbase.dll 模块崩溃,错误代码 0x0000409

查看原文

使用表达式树来提高反射的性能

反射是C#中一种常用的技术,反射提供了动态创建和访问对象的基础,但是反射在带来了极强的灵活性的同时,也带了极大的性能损耗,本文就介绍通过表达式树来提高反射过程中的性能。

查看原文

IIS 设置跨域问题

之前说过nginx设置跨域,今天记录以下IIS设置跨域

查看原文

JavaScript构建一个Markdown解析器

Markdown是一种轻量级标记语言,以简单易读的语法和可生成丰富多彩的内容,受到开发者们的青睐。无论是文档编写,还是博客传记都广泛使用到Markdown。本文介绍试用JavaScript来构建一个Markdown解析器,解锁Markdown的强大之处。

查看原文

WPF托盘运行

本文介绍如何将WPF应用最小化到托盘,窗口关闭后进程仍然运行的方法。

查看原文