使用写入注册表项开机启动的方式问题:注册表禁止写入

[软件开发] 季雨林 2023/2/2 11:14:45

最近开发系统,用到了一个开机启动的功能。

最终采用了注册表方式,其原理是启动程序时候检查配置文件,按配置进行自动写入注册表启动,或者删除注册表里的启动项方式


具体开发完成,验证发现,多台机器多个系统都通过了测试 ,但是就在一台win10上,不知道系统经历了什么样的配置或者限制,最终报错禁止操作注册表。添加开机启动和删除开机启动都是需要进行读写的,所以就意味着这个功能不够健壮。离开这个功能会让系统的运转周期不全面,所以就顺着现有思路查了下。


最终在百度搜索无果,要么404已失效,要么垃圾csdn,要么是各处重复的拷贝。就连那些稍微久一点爬虫站也没有搜到有效线索。

最终切换google,居然搜到一个小众的网站,提到了办法:开机启动操作的注册表配置,从LocalMachine改成CurrentUser。说白了就是从全局配置,改成仅当前用户的注册表项配置,C#代码的表现为:

//这句是原来的写法,所有用户登录都可用
RegistryKey rKey = Microsoft.Win32.Registry.LocalMachine;
/这句诗修改后的写法,只把开机启动配置,写入当前用户的注册表启动配置
RegistryKey rKey = Microsoft.Win32.Registry.CurrentUser;

//报错的这行代码无需调整
RegistryKey reg = rKey.CreateSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run", RegistryKeyPermissionCheck.ReadWriteSubTree);


这两个的区别是,当前用户的注册表节点,权限要求低,所以对于系统要求比较严格的场景,CurrentUser更可靠,虽然只是当前用户,但实际对于绝大部分家用电脑来说足够了,因为大部分人的电脑都是单用户用法。


修改后验证可行。


原文地址: https://www.opengps.cn/Blog/View.aspx?id=1024 文章的更新编辑依此链接为准。欢迎关注源站原创文章!

评论

暂无评论!

发表评论:

用于接收作者回复信息
点击更换验证码 - openGPS提示