Ich habe eine kleine Anwendung mit einer CheckBox
Option, die der Benutzer festlegen kann, wenn die App mit Windows gestartet werden soll.
Meine Frage ist, wie ich die App tatsächlich so einstelle, dass sie beim Start ausgeführt wird.
ps: Ich verwende C # mit .NET 2.0.
Antworten:
Verschiedene Optionen in der Reihenfolge ihrer Präferenz:
HKey_Current_User\Software\Microsoft\Windows\CurrentVersion\Run
Registrierungsschlüssel hinzu. Das einzige Problem hierbei ist, dass Schreibzugriff auf die Registrierung erforderlich ist, die nicht immer verfügbar ist.HKey_Local_Machine\Software\Microsoft\Windows\CurrentVersion\Run
Registrierungsschlüssel hinzu. Das einzige Problem hierbei ist, dass Schreibzugriff auf die Registrierung erforderlich ist, die nicht immer verfügbar ist.Diese Antwort ist jetzt älter. Seit ich dies geschrieben habe, wurde Windows 10 veröffentlicht, das die Funktionsweise der Ordner im Startmenü ändert ... einschließlich des
Startup
Ordners. Mir ist noch nicht klar, wie einfach es ist, eine Datei in diesem Ordner hinzuzufügen oder zu entfernen, ohne auch auf die interne Datenbank zu verweisen, die Windows für diese Speicherorte verwendet.quelle
Vielen Dank an alle, die so schnell reagiert haben. Joel, ich habe Ihre Option 2 verwendet und dem Ordner "Ausführen" des aktuellen Benutzers einen Registrierungsschlüssel hinzugefügt. Hier ist der Code, den ich für alle anderen Interessierten verwendet habe.
using Microsoft.Win32; private void SetStartup() { RegistryKey rk = Registry.CurrentUser.OpenSubKey ("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true); if (chkStartUp.Checked) rk.SetValue(AppName, Application.ExecutablePath); else rk.DeleteValue(AppName,false); }
quelle
AppName
?Hier finden Sie alle Möglichkeiten, um Ihr Programm zum Start für Windows Vista, 7, 8, 10 hinzuzufügen
quelle
UI
angezeigt wurden. aber der Server lief immer noch gut. (Windows Server 2016)Sie können einen Registrierungseintrag unter "HKCU \ Software \ Microsoft \ Windows \ CurrentVersion \ Run" erstellen. Beachten Sie jedoch, dass dies unter Vista möglicherweise anders funktioniert. Ihre Einstellung wird möglicherweise aufgrund der Benutzerkontensteuerung "virtualisiert".
quelle
Zusätzlich zur Antwort von Xepher Dotcom sollte der Ordnerpfad zum Windows-Start folgendermaßen codiert werden:
var Startup = Environment.GetFolderPath(Environment.SpecialFolder.Startup);
quelle
Es ist eine so einfache Lösung:
Hinzufügen
Microsoft.Win32.RegistryKey key = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true); key.SetValue("Your Application Name", Application.ExecutablePath);
Zu entfernen
Microsoft.Win32.RegistryKey key = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true); key.DeleteValue("Your Application Name", false);
quelle
Wenn eine Anwendung so konzipiert ist, dass sie beim Start von Windows gestartet wird (im Gegensatz zur Anmeldung eines Benutzers), können Sie nur einen Windows-Dienst einbeziehen. Schreiben Sie die Anwendung entweder als Dienst oder schreiben Sie einen einfachen Dienst, der nur zum Starten der Anwendung vorhanden ist.
Schreibdienste können schwierig sein und Einschränkungen auferlegen, die für Ihren speziellen Fall möglicherweise nicht akzeptabel sind. Ein gängiges Entwurfsmuster ist ein Front-End / Back-End-Paar mit einem Dienst, der die Arbeit erledigt, und einem Anwendungs-Front-End, das mit dem Dienst kommuniziert, um dem Benutzer Informationen anzuzeigen.
Wenn Sie jedoch nur möchten, dass Ihre Anwendung bei der Benutzeranmeldung gestartet wird, können Sie die von Joel Coehoorn aufgelisteten Methoden 1 oder 2 verwenden.
quelle
/// <summary> /// Add application to Startup of windows /// </summary> /// <param name="appName"></param> /// <param name="path"></param> public static void AddStartup(string appName, string path) { using (RegistryKey key = Registry.CurrentUser.OpenSubKey ("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true)) { key.SetValue(appName, "\"" + path + "\""); } } /// <summary> /// Remove application from Startup of windows /// </summary> /// <param name="appName"></param> public static void RemoveStartup(string appName) { using (RegistryKey key = Registry.CurrentUser.OpenSubKey ("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true)) { key.DeleteValue(appName, false); } }
quelle
Ich fand das Hinzufügen einer Verknüpfung zum Startordner der einfachste Weg für mich. Ich musste einen Verweis auf "Windows Script Host Object Model" und "Microsoft.CSharp" hinzufügen und verwendete dann diesen Code:
IWshRuntimeLibrary.WshShell shell = new IWshRuntimeLibrary.WshShell(); string shortcutAddress = Environment.GetFolderPath(Environment.SpecialFolder.Startup) + @"\MyAppName.lnk"; System.Reflection.Assembly curAssembly = System.Reflection.Assembly.GetExecutingAssembly(); IWshRuntimeLibrary.IWshShortcut shortcut = (IWshRuntimeLibrary.IWshShortcut)shell.CreateShortcut(shortcutAddress); shortcut.Description = "My App Name"; shortcut.WorkingDirectory = AppDomain.CurrentDomain.BaseDirectory; shortcut.TargetPath = curAssembly.Location; shortcut.IconLocation = AppDomain.CurrentDomain.BaseDirectory + @"MyIconName.ico"; shortcut.Save();
quelle
Sie können dies mit der win32-Klasse im Microsoft-Namespace tun
using Microsoft.Win32; using (RegistryKey key = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true)) { key.SetValue("aldwin", "\"" + Application.ExecutablePath + "\""); }
quelle