1.原理:需要開機自啟動的程序,需要將其啟動程序的路徑寫到注冊表中指定的文件夾下
2. 寫入注冊表的方式有兩種
a.在生成安裝程序時配置
b.在程序運行時,動態配置
方法一:使用VS2010自帶的打包模塊可以很方便的對項目進行打包部署,同時我們也可以在安裝部署時操作注冊表實現開機啟動軟件。具體實現如下:
1、添加安裝部署項目后,鼠標右鍵安裝項目->視圖->注冊表,HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run中 添加鍵值保存軟件目錄。
注意:默認的可能只有HKEY_CURRENT_USER\Software\[Manufacturer],沒關系,我們依次添加以上的項即可,通過右鍵菜單新建"鍵",創建出如圖所示的路徑。即:HKEY_CURRENT_USER\Software\[Manufacturer]\Windows\CurrentVersion\Run。
2、然后在Run中添加字符串值,鍵名可以自己起,value要填軟件的物理路徑。
物理路徑是客戶在部署確定的,我們如何獲取呢?這里我們可以使用[TARGETDIR]獲取客戶選擇的路徑,在加上軟件的啟動文件名稱。比如軟件啟動文件的名稱是xx.exe,那么Value的值就為:[TARGETDIR]xx.exe。

這樣,重啟電腦系統就會自動運行我們設置的軟件。
方法一本人親測成功。
自啟動成功后遇到的其他問題:安裝后用鼠標點擊打開可以正常運行,開機也可以自動啟動,但是它讀取配置文件數據(存在需要讀取程序里面相關的配置文件)時出錯,我關閉它用鼠標打開又可以正常運行
解決方法:開機時系統有很多內容沒加載完全,軟件就啟動程序了,所以開機啟動時不能找到那個配置文件。我直接將讀取數據的路徑改為 Application.StartupPath+配置文件路徑就解決了 ,或者設置一個延時,延遲讀取配置文件的時間。
public static string filePath = Application.StartupPath + @".\文件夾\文件名.bmp";//系統的filePath的路徑
方法二:在程序運行時指定是否開機啟動
在程序運行時,通過調用如下方法實現開機啟動
1 /// <summary> 2 /// 修改程序在注冊表中的鍵值 3 /// </summary> 4 /// <param name="isAuto">true:開機啟動,false:不開機自啟</param> 5 public static void AutoStart(bool isAuto) 6 { 7 try 8 { 9 if (isAuto == true) 10 { 11 RegistryKey R_local = Registry.LocalMachine;//RegistryKey R_local = Registry.CurrentUser; 12 RegistryKey R_run = R_local.CreateSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run"); 13 R_run.SetValue("應用名稱", Application.ExecutablePath); 14 R_run.Close(); 15 R_local.Close(); 16 } 17 else 18 { 19 RegistryKey R_local = Registry.LocalMachine;//RegistryKey R_local = Registry.CurrentUser; 20 RegistryKey R_run = R_local.CreateSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run"); 21 R_run.DeleteValue("應用名稱", false); 22 R_run.Close(); 23 R_local.Close(); 24 } 25 26 //GlobalVariant.Instance.UserConfig.AutoStart = isAuto; 27 } 28 catch (Exception) 29 { 30 //MessageBoxDlg dlg = new MessageBoxDlg(); 31 //dlg.InitialData("您需要管理員權限修改", "提示", MessageBoxButtons.OK, MessageBoxDlgIcon.Error); 32 //dlg.ShowDialog(); 33 MessageBox.Show("您需要管理員權限修改", "提示"); 34 }
注:該程序的啟動項設置到HKEY_Current_User 下,推薦。如果想改在HKEY_LOCAL_MACHINE,只需將CurrentUser改為LocalMachine,即
1 Rkey = Microsoft.Win32.Registry.LocalMachine.CreateSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run");
操作注冊表有可能會需要程序有管理員權限,這時候就要在程序以管理員身份啟動並運行。此時應進行以下操作。
1、在程序中添加程序清單文件。通過VS添加,右鍵項目選擇添加選擇新建項,選擇程序清單。如下圖。

2、設置UAC 選項。如圖。
