開機自啟動——修改注冊表


因為項目中需要用到設置程序為開機自啟動的,就在代碼中修改注冊表的方式來做的。

但是在做的過程中出現一些問題,在查閱資料后,進行了一些總結。

一、代碼

直接使用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位軟件設置;

 

從上面可以看出,注冊的地方不一樣,登錄的用戶不一樣即使是同一個機器,開機自啟的軟件也會不一樣。

 

問題:

在實踐過程中,出現同一個代碼,運行時的權限、是否管理員運行導致注冊的地方不一樣。

這個問題還沒有搞明白。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM