Montag, 3. September 2012

Programm automatisch mit Windows starten

In diesem Post möchte ich zeigen, wie man ein C# Programm per Code dem Autostart von Windows hinzufügt. Hierfür gibt es 2 Möglichkeiten: Entweder kann man eine Verknüpfung auf das Programm im Autostart Ordner erstellen, oder einen entsprechenden Eintrag in der Registry anlegen.

1. Methode: Verknüpfung erstellen
Wie man allgemein eine Verknüpfung anlegt, habe ich in diesem Post beschrieben. Wir müssen nun als Verknüfungsziel unser Programm angeben und als Pfad den Autostartordner von Windows, dieser befindet sich bei Windows 7 in C:\Users\User\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup. Den Pfad zur eigenen Anwendung gibt es über den Befehl Application.ExecutablePath.ToString() - also führt folgender Code dazu, dass das Programm in den Autostart kopiert wird (als Icon lässt sich etwas beliebiges einsetzen):
CreateShortcut(@"C:\Users\User\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup" + "\\CAutoStart.url",  Application.ExecutablePath.ToString(), "C:\\MeinIcon.ico");


2. Methode: Eintrag in der Registry erstellen
Das Analogon zum obigen Pfad findet sich unter HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run in der Registry. Wie man generell mit der Registry umgeht, habe ich in diesem Tutorial beschrieben. Hier zeige ich nur den fertigen Code, welcher den passenden Eintrag in oben genanntem Pfad anlegt:
RegistryKey AutostartKey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Run", true);
AutostartKey.SetValue("CAutoStart", Application.ExecutablePath.ToString());
AutostartKey.Close();

Kommentare:

  1. Hey, alternativ zur Verknüpfung in \Autostart und dem Registry-Eintrag, kann man auch einen Task erstellen, welcher bei Anmeldung eines Users ausgeführt wird. Dies ist soweit ich weiß ab Windows 7 die best-practise. Wird zwar von fast niemandem gemacht, ist aber unter Windows 8 der einzige zuverlässige Weg, sich zu autostarten.
    Den code dazu habe ich in ein NuGet Paket gepackt (TCD.System.ApplicationExtensions).
    Alternativ gibt es ihn auch hier: http://dl.dropbox.com/u/7813771/Blog/CodeSamples/ApplicationAutostart.cs
    gruß, Michael =)

    AntwortenLöschen
  2. Ist das gewollt, dass bei der ersten Lösung kein Code sondern nur eine halbe Zeile angezeigt wird?

    Bin gerade dabei ein Programm zu schreiben welches mit Windows starten soll.

    AntwortenLöschen
    Antworten
    1. Hi, was meinst du mit kein Code?
      Meines Erachtens ist die 1. Lösung komplett, nur der vorige Post wird eben benötigt.

      Löschen
    2. Jein, mit dem FF 32 ist nur ein Teil sichtbar. Wenn jedoch darüberhinaus kopiert wird, kommt das raus

      CreateShortcut(@"C:\Users\User\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup" + "\\CAutoStart.url", Application.ExecutablePath.ToString(), "C:\\MeinIcon.ico");



      2. Methode: Eintrag in der Registry erstellen

      Löschen
  3. hey
    bei mit funktionierts nicht... die ganze funtion rot unterstrichen

    AntwortenLöschen