none
Datei wieder aus Autostart entfernen über Checkbox RRS feed

  • Frage

  • Ich habe einen Code geschrieben, in dem ich über eine Checkbox, ein Programm in den Autostart kopieren kann. Nun möchte ich, dass das Programm wieder aus dem Autostart entfernt wird, wenn man die Checkbox abwählt.

    Hier der Code zum hinzufügen in den Autostart:

    private void checkBox1_CheckedChanged(object sender, EventArgs e)
            {
                if (checkBox1.Checked == true)
                {
                    System.IO.File.Copy("Avira Werbeblocker.exe", System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Startup), "Avira Werbeblocker.exe")); 
                }
                else
                {
                    
                }            
            } 
    Kann mir da einer weiterhelfen? Danke schon mal im voraus! ;)

    Mittwoch, 31. Oktober 2012 17:50

Antworten

  • Hallo, ich würde an deiner Stelle den Autostart nicht über den ordner im Startmenü sondern über die Registry machen:
    http://dotnet-snippets.de/dns/addremove-registry-entries-for-windows-startup-SID438.aspx

    So brauchst du nur den Schlüssel zu entfernen und kannst dein Programm im Ordner lassen.


    Koopakiller - http://koopakiller.ko.ohost.de/

    Mittwoch, 31. Oktober 2012 17:58
    Moderator
  • Hallo zusammen,

    Es ist ungewöhnlich eine Anwendung unter Environment.SpecialFolder.Startup zu speichern. Normalerweise würde man da höchtens einen Link auf die ausführbare Datei erwarten (ist in einigen Fällen auch einfacher zu löschen).

    Wie auch immer braucht man aber - auch wenn man den von K. empfohlenen Weg über die Registrierung nimmt - erhöhte Berechtigungen. Dazu fügt man dem Projekt in Visual Studio eine Anwendungsmanifestdatei hinzu und setzt darin das Level-Attribut des Elements requestedExecutionLevel auf requireAdministrator. Damit wird schon beim Start über UAC sichergestellt, dass die Vorgänge erfolgreich abgeschlossen werden können (es gibt dazu Alternativen, ich ziehe aber hier das Manifest vor).

    Das Snippet auf das K. verweist, ist in dem Punkt etwas irreführend, dass dort als Registry-Speicherort der Zweig HKLM verwendet wird. In den seltensten Fällen aber sollte man dort schreiben, auch wenn man die nötigen Berechtigungen hat (im Standardfall eher nicht). Die Einstellungen dort gelten maschinenweit, und man weiß u.a. nie genau unter welchem Konto und mit welchen effektiven Berechtigungen die Anwendung schlussendlich ausgeführt werden wird. Wenn schon, dann würde ich statt Registry.LocalMachine besser Registry.CurrentUser nehmen, das engt die Fehlerquellen ein.

    P.S. Einen Vorteil hat die Lösung über den Startup-Ordner: sie ist u.U. remotable (was man über Änderungen an der lokalen Registrierung nicht sagen kann).

    Gruß
    Marcel


    Mittwoch, 31. Oktober 2012 21:30
    Moderator

Alle Antworten