开机自启动——修改注册表
因为项目中需要用到设置程序为开机自启动的,就在代码中修改注册表的方式来做的。
但是在做的过程中出现一些问题,在查阅资料后,进行了一些总结。
一、代码
直接使用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位软件设置;
从上面可以看出,注册的地方不一样,登录的用户不一样即使是同一个机器,开机自启的软件也会不一样。
问题:
在实践过程中,出现同一个代码,运行时的权限、是否管理员运行导致注册的地方不一样。
这个问题还没有搞明白。