以下是兩種實現C#軟件開機自啟動的常用方法,根據需求選擇適合的方案:
方法1:通過注冊表實現(需管理員權限)
using Microsoft.Win32;
using System.Diagnostics;public static class AutoStartManager
{/// <summary>/// 設置程序開機自啟動/// </summary>/// <param name="enable">true:啟用自啟動, false:禁用自啟動</param>public static bool SetAutoStart(bool enable){try{// 獲取當前程序路徑string appName = Process.GetCurrentProcess().ProcessName;string appPath = Process.GetCurrentProcess().MainModule.FileName;// 打開注冊表項(當前用戶級)using (RegistryKey regKey = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Run", true)){if (regKey == null) return false;if (enable){// 添加注冊表鍵值(帶引號確保路徑空格正確處理)regKey.SetValue(appName, "\"" + appPath + "\"");}else{// 移除注冊表鍵值if (regKey.GetValue(appName) != null){regKey.DeleteValue(appName);}}}return true;}catch{// 需要管理員權限處理異常return false;}}
}
特點 :
- ? 適用于所有用戶會話啟動
- ? 需要管理員權限(程序需以管理員身份運行)
- 📍 注冊表位置:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
方法2:通過啟動文件夾實現(無需管理員權限)
using IWshRuntimeLibrary; // 需添加COM引用: Windows Script Host Object Model
using System.IO;public static class AutoStartManager
{public static bool SetAutoStart(bool enable, string shortcutName = "MyApp"){try{// 獲取啟動文件夾路徑string startupPath = Environment.GetFolderPath(Environment.SpecialFolder.Startup);string shortcutPath = Path.Combine(startupPath, $"{shortcutName}.lnk");string appPath = Process.GetCurrentProcess().MainModule.FileName;if (enable){// 創建快捷方式var shell = new WshShell();IWshShortcut shortcut = (IWshShortcut)shell.CreateShortcut(shortcutPath);shortcut.TargetPath = appPath;shortcut.WorkingDirectory = Path.GetDirectoryName(appPath);shortcut.Description = "My Application AutoStart";shortcut.Save();}else{// 刪除快捷方式if (File.Exists(shortcutPath)){File.Delete(shortcutPath);}}return true;}catch{return false;}}
}
特點:
- ? 無需管理員權限
- ? 僅對當前用戶有效
- 📍 快捷方式位置:
%AppData%\Microsoft\Windows\Start Menu\Programs\Startup
使用示例
// 開啟自啟動
AutoStartManager.SetAutoStart(true);// 關閉自啟動
AutoStartManager.SetAutoStart(false);
注意事項 :
-
管理員權限要求:
注冊表方法需在項目屬性 → 應用程序 → 清單中設置requireAdministrator
<requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>
-
路徑處理:
路徑含空格時需用引號包裹:"\"" + appPath + "\""
-
替代方案:
對于需管理員權限但無法獲取的場景,推薦使用啟動文件夾方案
兩種方法在實測中均穩定可用,根據安全需求和權限限制選擇適當方案。注冊表方式更持久,啟動文件夾方式更安全[5]。