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

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

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

一、代码

直接使用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:新建或者打开一个现有子项进行读写访问;
后面的代码是添加或删除指定的项,这些操作是对上面打开的子项,这里做了是否已经存在的判断。

二、自启动

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

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

这些地方分别是:

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位软件设置;

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

问题:

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

这个问题还没有搞明白。

猜你喜欢

转载自www.cnblogs.com/zhurong/p/11039615.html