it-swarm.com.de

Wie stelle ich ein Programm ein, das beim Start gestartet wird?

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 eigentlich beim Start einstellen lasse.

ps: Ich verwende C # mit .NET 2.0.

63
Spidey

Mehrere Optionen in der bevorzugten Reihenfolge:

  1. Fügen Sie es dem Autostartordner des aktuellen Benutzers hinzu. Dies erfordert die geringste Berechtigung für die Ausführung Ihrer App und gibt dem Benutzer die meiste Kontrolle und Rückmeldung über die Vorgänge. Der Nachteil ist, dass es etwas schwieriger ist zu bestimmen, ob das Kontrollkästchen beim nächsten Anzeigen dieses Bildschirms in Ihrem Programm bereits aktiviert ist.
  2. Fügen Sie es dem HKey_Current_User\Software\Microsoft\Windows\CurrentVersion\Run-Registrierungsschlüssel hinzu. Das einzige Problem hierbei ist, dass ein Schreibzugriff auf die Registrierung erforderlich ist, die nicht immer verfügbar ist.
  3. Erstellen Sie eine geplante Aufgabe, die bei der Benutzeranmeldung ausgelöst wird
  4. Fügen Sie es dem HKey_Local_Machine\Software\Microsoft\Windows\CurrentVersion\Run-Registrierungsschlüssel hinzu. Das einzige Problem hierbei ist, dass ein Schreibzugriff auf die Registrierung erforderlich ist, die nicht immer verfügbar ist.
  5. Richten Sie es als Windows-Dienst ein. Tun Sie dies nur, wenn Sie wirklich meinen es, und Sie wissen, dass Sie dieses Programm für alle Benutzer auf dem Computer ausführen möchten.

Diese Antwort ist jetzt älter. Seitdem ich dies geschrieben habe, wurde Windows 10 veröffentlicht. Dadurch wird die Funktionsweise der Ordner "Startmenü" geändert ... einschließlich des Ordners "Startup". Mir ist noch nicht klar, wie einfach es ist, eine Datei in diesem Ordner hinzuzufügen oder zu entfernen, ohne auf die interne Datenbank zu verweisen, die Windows für diese Speicherorte verwendet.

100
Joel Coehoorn

Vielen Dank an alle, die so schnell geantwortet haben. Joel. Ich habe Ihre Option 2 verwendet und einen Registrierungsschlüssel zum Ordner "Ausführen" des aktuellen Benutzers hinzugefügt.

    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);            

    }
118
Spidey

Sie müssen einen Registrierungsschlüssel festlegen, in der Regel mit Ihrem Installationsprogramm. Unter http://www.windowsdevcenter.com/pub/a/oreilly/windows/ron/startup_0401.html finden Sie eine vollständige Lösung. 

10
Justin R.

Sie können einen Registrierungseintrag in "HKCU\Software\Microsoft\Windows\CurrentVersion\Run" erstellen. Beachten Sie, dass es unter Vista anders funktionieren kann. Ihre Einstellung wird möglicherweise aufgrund von UAC "virtualisiert".

5
Jon Tackabury

Wenn eine Anwendung beim Start von Windows gestartet werden soll (im Gegensatz zur Anmeldung eines Benutzers), besteht die einzige Möglichkeit darin, einen Windows-Dienst einzubeziehen. Schreiben Sie die Anwendung entweder als Dienst oder schreiben Sie einen einfachen Dienst, der nur zum Starten der Anwendung vorhanden ist.

Das Schreiben von Diensten kann schwierig sein und Beschränkungen auferlegen, die für Ihren speziellen Fall inakzeptabel sind. Ein übliches 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 dagegen möchten, dass Ihre Anwendung beim Anmelden des Benutzers startet, können Sie die von Joel Coehoorn aufgeführten Methoden 1 oder 2 verwenden.

3
Harper Shelby

Hier können Sie Ihr Programm ganz einfach zum Start für Windows Vista, 7, 8, 10 hinzufügen

  • Dateipfad

C:\Users\Bureau Briffault\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup (Sichtbar vom Task-Manager, Wird auf der aktuellen Benutzeranmeldung erfolgreich ausgeführt, Keine Administratorrechte erforderlich)

C:\Users\Default\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup (Sichtbar vom Task-Manager, Wird für alle Benutzer ausgeführt Login erfolgreich, Admin-Berechtigungen erforderlich)


  • Registrierungspfad

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run (Sichtbar vom Task-Manager, Wird bei erfolgreichem Login erfolgreich ausgeführt, Nein Administratorrechte erforderlich)

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce (Nicht im Task-Manager sichtbar, Wird beim aktuellen Benutzer erfolgreich ausgeführt, Für eine Anmeldezeit ausgeführt, Keine Administratorrechte erforderlich.)

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run (Sichtbar vom Task-Manager, Wird für alle Benutzer erfolgreich ausgeführt, Admin Berechtigungen erforderlich.)

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce (Nicht im Task-Manager sichtbar, Wird für alle Benutzer erfolgreich ausgeführt, Für eine Anmeldezeit ausgeführt, Administratorrechte erforderlich.)


  • Task Scheduler

Microsoft.Win32.Taskscheduler.dll (Nicht sichtbar im Task-Manager, Beim Windows-Boot ausführen, Als Administrator ausführen, Admin-Berechtigungen erforderlich.)

3
Xepher Dotcom
    /// <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);
        }
    }
1
INS software

Ich fand es für mich am einfachsten, eine Verknüpfung zum Startordner hinzuzufügen. 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();
1
gcdev

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);

Sie können dies mit der Klasse win32 im Microsoft-Namensraum tun

using Microsoft.Win32;

using (RegistryKey key = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true))
 {
            key.SetValue("aldwin", "\"" + Application.ExecutablePath + "\"");
 }
0
Aldwin Nunag

Zusätzlich zur Antwort von Xepher Dotcom sollte der Ordnerpfad zum Windows-Startup folgendermaßen codiert werden:

var Startup = Environment.GetFolderPath(Environment.SpecialFolder.Startup);
0
Krzysiek