C#程序增加开机自启动

一、实现前提

要达到开机自启动,可通过增加自启动注册表实现

其中自启动注册表分为两部分

①HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run:该路径仅适用于当前用户

②HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run:适用于所有用户

二、实现方法

string regPath = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run";
                string path = Application.ExecutablePath.ToLower();
                string name = Path.GetFileName(path);
                var regKey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(regPath, true);
                if (regKey == null)
                    regKey = Microsoft.Win32.Registry.LocalMachine.CreateSubKey(regPath);
                regKey.SetValue(name, path);

三、注意事项

3.1 不允许访问注册表权限

要写入HKEY_LOCAL_MACHINE,需要管理员权限,否则程序会报错

改成写入HKEY_CURRENT_USER后,不需要管理员权限

3.2 目录下没有相关注册表

如果程序是32位,则注册表位置会在HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node,这个路径下的注册表项是专门为32位应用程序而设计的,并存储在64位系统的32位注册表视图中

四、存在问题点

4.1 修改HKEY_LOCAL_MACHINE下注册标时权限问题

部分Win10电脑可以可以直接修改,不会提示权限不足,但是部分电脑又会提示权限不足。

经对比,所有电脑账户均为管理员账户,UAC控制均为关闭,差异点在于不提示权限不足的电脑未激活Window(目前只发现这个差异点,不清楚根本原因)

4.2 注册表重定位问题

32位程序在64系统写入HKEY_LOCAL_MACHINE时,会重定位到HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node

但是在写入HKEY_CURRENT_USER时,注册表不会进行重定位

放一个chatgpt的回答

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值