在使用C#進行應用程序的開發過程中,經常有一個需求就是讓應用程序開機后自動啟動,這個是一個很常見的需求,最常規的做法(這里以Win7操作系統為例),打開:開始=》所有程序=》啟動文件夾(路徑是:C:\Users\bobo\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup),然后可以將exe(這里以X.Shell.exe為例來說明)或者其快捷方式放到當前文件夾下面,這樣我們就可以在應用程序下次啟動的時候自動啟動當前應用程序中,同時我們也可以通過:Windows+R然后輸入msconfig來查看系統配置,在啟動中來查看啟動項目,我們會看到在啟動項下面會有剛才添加的應用程序X.Shell.exe,如下圖所示:
這是我們再通過:Windows+R==>regedit來查看注冊表信息,開是否寫入了注冊表中:我們沒有發現寫入到Windows的注冊表中,注:Windows的默認開機啟動項是寫到:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run這個鍵值下面。
所以最為合理的方式就是將exe程序寫入到注冊表中,首先看看插入和刪除注冊表信息的代碼。
private void AutoRunAfterStart() { //獲取當前應用程序的路徑 string localPath = Application.ExecutablePath; if (!System.IO.File.Exists(localPath))//判斷指定文件是否存在 return; RegistryKey reg = Registry.LocalMachine; RegistryKey run = reg.CreateSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run"); //判斷注冊表中是否存在當前名稱和值 if (run.GetValue("ControlPanasonic.exe") == null) { try { run.SetValue("ControlPanasonic.exe", localPath); MessageBox.Show(" 當前應用程序已成功寫入注冊表!", "溫馨提示", MessageBoxButtons.OK, MessageBoxIcon.Information); reg.Close(); } catch (Exception ex) { MessageBox.Show(ex.Message.ToString(), "溫馨提示", MessageBoxButtons.OK, MessageBoxIcon.Error); } } } //刪除注冊表鍾的特定值 private void DeleteSubKey() { RegistryKey reg = Registry.LocalMachine; RegistryKey run = reg.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run",true); try { run.DeleteValue("ControlPanasonic.exe"); MessageBox.Show(" 當前應用程序已成功從注冊表中刪除!", "溫馨提示", MessageBoxButtons.OK, MessageBoxIcon.Information); reg.Close(); } catch (Exception ex) { MessageBox.Show(ex.Message.ToString(), "溫馨提示",MessageBoxButtons.OK, MessageBoxIcon.Error); } }
現在就上面的代碼做一些簡要的分析,RegistryKey reg = Registry.LocalMachine;RegistryKey run = reg.CreateSubKey(@"SOFTWARE\Microsoft \Windows \CurrentVersion\Run");這兩句代碼的核心是獲取RegistryKey 的對象,然后通過SetValue以及DeleteValue將當前的exe寫入到注冊表中,這樣就能夠永久去保存當前的鍵值對,從而確定開機啟動項。