Winform中设置程序开机自启动(修改注册表和配置自启动快捷方式)

场景

winform程序需要在启动时自启动,可通过将exe快捷方式添加到自启动目录下,或者通过修改注册表添加启动项的方式。

注:

博客:
霸道流氓气质-CSDN博客

实现

使用添加快捷方式到启动目录的方式

Windows下怎样使用bat设置Redis和Nginx开机自启动:

Windows下怎样使用bat设置Redis和Nginx开机自启动_bat脚本 一键启动redis jar nginx-CSDN博客

参考以上流程,将.exe创建快捷方式,并将快捷方式移动或复制到如下目录

C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp

使用修改注册表的方式

通过将启动路径添加到注册表的方式,在程序启动时执行写入注册表的操作,在下次重启时则会自动启动。

但是操作注册表需要管理员权限,所以即使是自动启动后,仍然手动点击确定,赋予管理员权限。

所以根据自己需要,如果仅仅是考虑只让其启动,不用自动执行相关操作等后续,可采用此种,或者考虑从其他层面去掉自启动后

手动确认赋予管理员权限的操作。

否则采用上面的方式。

新建操作注册表的工具类:

using Microsoft.Win32;
using System;
using System.Windows.Forms;

namespace WinformStudyDemo.com.badao.utils
{
    class AutoStartHelper
    {

        public static void OpenAutoStartUp()
        {
            // 要设置软件名称,有唯一性要求,最好起特别一些
            string name = "badaodechengxvyuan";
            Console.WriteLine("设置开机自启动,需要修改注册表");
            string currentPath = Application.ExecutablePath.ToLower();
            try
            {
                string regPath = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run";
                var regKey = Registry.LocalMachine.OpenSubKey(regPath, true);
                if (regKey == null)
                {
                    var regKey2 = Registry.LocalMachine.CreateSubKey(regPath);
                    regKey2.SetValue(name, currentPath);
                    regKey2.Close();
                }
                else
                {
                    string old_path = (string)regKey.GetValue(name);
                    if (old_path == null || !old_path.Equals(currentPath))
                    {
                        if (regKey.GetValue(name) != null)
                        {
                            regKey.DeleteValue(name);
                        }
                        regKey.SetValue(name, currentPath);
                    }
                }
                regKey.Close();
            }
            catch (Exception exception)
            {
                Console.WriteLine("开机自启动设置失败");
                Console.WriteLine(exception.Message);
            }
        }
    }
}

工具类方法逻辑说明:

获取注册表对应项的所有子项,如果为空,则新建名称为自定义的名称,值为当前路径的子项。

否则存在的话则尝试获取自定义名称的项,如果为空则新建,不为空且与当前值不一致则删除并新建。

修改Program.cs

        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            //设置开机自启动
            com.badao.utils.AutoStartHelper.OpenAutoStartUp();
            Application.Run(new Form1());
        }

此时直接执行则不生效,需要申请管理员权限。

右击项目-新建项-常规-应用程序清单文件

修改如下代码赋予管理员权限申请

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

修改位置

则使用VS本地运行时则会提示

需要使用管理员启动VS

用管理员启动VS即可

运行成功之后,则会在注册表中编辑-查找中搜索到

在启动时就会进行管理员运行提示

  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

霸道流氓气质

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值