开机自启动——修改注册表

因为项目中需要用到设置程序为开机自启动的,就在代码中修改注册表的方式来做的。

但是在做的过程中出现一些问题,在查阅资料后,进行了一些总结。

一、代码

直接使用C#代码操作注册表,注册为开机启动项。

复制代码
    RegistryKey Local = Registry.LocalMachine;
    RegistryKey runKey = Local.CreateSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run", RegistryKeyPermissionCheck.ReadWriteSubTree);
    string keyName = Path.GetFileName(Application.ExecutablePath);
    string valueStr = "\"" + Application.ExecutablePath + "\" -autorun";
    object key = runKey.GetValue(keyName);
    if (key != null)
    {
        runKey.DeleteValue(keyName);
    }
    if (config.IsAuto)
    {
        runKey.SetValue(keyName, valueStr);
    }
    Local.Close();
复制代码

Registry.LocalMachine:本地计算机的配置数据,属于注册表的顶级节点;
RegistryKey.CreateSubKey:新建或者打开一个现有子项进行读写访问;
后面的代码是添加或删除指定的项,这些操作是对上面打开的子项,这里做了是否已经存在的判断。

二、自启动

在注册完成后出现了一些问题,有时不能正确的自启动。

查阅资料发现,注册表有几个地方都可以进行注册开机自启动。

打开注册表:win + R ,打开运行对话框;输入 regedit ,打开注册表编辑器。

这些地方分别是:

1、HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
2、HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run
3、HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run

查看了这几个地方,一些主流的软件设置开机自启动后,这几个地方都有可能是注册的地方。

HKEY_LOCAL_MACHINE:本地计算机的顶级项,在这个里面注册的,所有用户登录后都可以自启动;

HKEY_CURRENT_USER:当前用户顶级项,注册到这个下面的,只有该用户登录才会自启动;

Wow6432Node:是32位映射的子项,一些32位软件设置;

 

从上面可以看出,注册的地方不一样,登录的用户不一样即使是同一个机器,开机自启的软件也会不一样。

 

问题:

在实践过程中,出现同一个代码,运行时的权限、是否管理员运行导致注册的地方不一样。

这个问题还没有搞明白。

posted @   漠里  阅读(7218)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端
点击右上角即可分享
微信分享提示