最近开发系统,用到了一个开机启动的功能。
最终采用了注册表方式,其原理是启动程序时候检查配置文件,按配置进行自动写入注册表启动,或者删除注册表里的启动项方式
具体开发完成,验证发现,多台机器多个系统都通过了测试 ,但是就在一台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
文章的更新编辑依此链接为准。欢迎关注源站原创文章!