Autostart aplikacji (C#)
Ostatnio potrzebowałem dodać funkcję autostartu do jednej z aplikacji, nad którą aktualnie pracuję. Cały proces jest bardzo prosty – wystarczy tylko dodać wpis do odpowiedniego rejestru windows i gotowe 🙂
W tym celu napisałem prostą, statyczną klasę pomocniczą, umożliwiającą zarządzanie programami dodanymi do autostartu. Nie będę się tutaj zbytnio rozpisywał, myślę, że kod jest wystarczająco czytelny.
/// <summary> /// Klasa pomocnicza do zarządzania autostartem aplikacji /// </summary> public static class AutostartHelper { #region Constants private const string AutoRunRegistryKey = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"; #endregion #region Public methods /// <summary> /// Zwraca listę aplikacji dodanych do autostartu jako pary wartości: NazwaAplikacji => ŚcieżkaDoPliku /// </summary> public static Dictionary<string, string> GetAutostartApps() { var result = new Dictionary<string, string>(); RegistryKey registryKey = Registry.CurrentUser.OpenSubKey(AutoRunRegistryKey, false); foreach (var appName in registryKey.GetValueNames()) { result.Add(appName, registryKey.GetValue(appName).ToString()); } registryKey.Close(); return result; } /// <summary> /// Dodaje wskazaną aplikację o podanym pliku .exe do autostartu /// </summary> public static void AddToStartup(string appName, string executablePath) { if (string.IsNullOrWhiteSpace(appName)) { throw new ArgumentNullException("Nazwa aplikacji nie może być pusta"); } if (string.IsNullOrWhiteSpace(executablePath)) { throw new ArgumentNullException("Ścieżka do pliku nie może być pusta"); } if (!File.Exists(executablePath)) { throw new FileNotFoundException("Podany plik nie istnieje", executablePath); } RegistryKey registryKey = Registry.CurrentUser.OpenSubKey(AutoRunRegistryKey, true); registryKey.SetValue(appName, executablePath); registryKey.Close(); } /// <summary> /// Usuwa wskazaną aplikację z autostartu /// </summary> public static void RemoveFromStartup(string appName) { if (string.IsNullOrWhiteSpace(appName)) { throw new ArgumentNullException("Nazwa aplikacji nie może być pusta"); } RegistryKey registryKey = Registry.CurrentUser.OpenSubKey(AutoRunRegistryKey, true); registryKey.DeleteValue(appName, false); registryKey.Close(); } /// <summary> /// Zwraca informację czy aplikacja o podanej nazwie jest dodana do autostartu /// </summary> public static bool IsStartup(string appName) { if (string.IsNullOrWhiteSpace(appName)) { throw new ArgumentNullException("Nazwa aplikacji nie może być pusta"); } RegistryKey registryKey = Registry.CurrentUser.OpenSubKey(AutoRunRegistryKey, false); var value = registryKey.GetValue(appName); registryKey.Close(); return (value != null); } #endregion }
I to by było na tyle. Mam nadzieję, że komuś się przyda te parę linijek 🙂