zoukankan      html  css  js  c++  java
  • 开机自启动——修改注册表

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

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

    一、代码

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

        RegistryKey Local = Registry.LocalMachine;
        RegistryKey runKey = Local.CreateSubKey(@"SOFTWAREMicrosoftWindowsCurrentVersionRun", 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_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun
    2、HKEY_LOCAL_MACHINESOFTWAREWow6432NodeMicrosoftWindowsCurrentVersionRun
    3、HKEY_CURRENT_USERSOFTWAREMicrosoftWindowsCurrentVersionRun

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

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

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

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

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

    问题:

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

    这个问题还没有搞明白。

  • 相关阅读:
    【翻译/介绍】jump consistent hash:零内存消耗,均匀,快速,简洁,来自Google的一致性哈希算法 [2015-03-13]
    现代密码学实践指南[2015年]
    本博客迁走了
    高性能web系统的架构和系统优化
    vs 2013调试的时候重启的解决方案
    年会与项目管理
    javascript 关闭窗口,弹出新窗口并带有确认关闭对话框解决办法
    成长
    POCO exception
    通过OpenGL ES在iOS平台实践增强现实(二)
  • 原文地址:https://www.cnblogs.com/zhurong/p/11039615.html
Copyright © 2011-2022 走看看