因為項目中需要用到設置程序為開機自啟動的,就在代碼中修改注冊表的方式來做的。
但是在做的過程中出現一些問題,在查閱資料后,進行了一些總結。
一、代碼
直接使用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位軟件設置;
從上面可以看出,注冊的地方不一樣,登錄的用戶不一樣即使是同一個機器,開機自啟的軟件也會不一樣。
問題:
在實踐過程中,出現同一個代碼,運行時的權限、是否管理員運行導致注冊的地方不一樣。
這個問題還沒有搞明白。