Autor Beitrag
Namenlosnameless
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 259
Erhaltene Danke: 6

Windows XP Home Edition, Windos Vista
C#
BeitragVerfasst: Di 27.07.10 16:24 
Hallo!

Ich will meine Anwendung bei jedem Starten von Windows ausführen. Das funktioniert auch wunderbar:

ausblenden C#-Quelltext
1:
2:
RegistryKey rkapp = Registry.LocalMachine.CreateSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Run");
                rkapp.SetValue("itunes-Screensaver", Application.StartupPath + "\\iTunes-ScreenSaver.exe");


Ich lasse jedesmal beim Schließen meiner Anwendung einen Key erstellen damit sich die Anwendung öffnen kann!

1 Frage: Allerdings weiß ich nicht ob ich jedes mal überprüfen muss ob der Key existiert, oder kann der gleiche Key nicht 2mal angelegt werden?

2 Frage: Wenn der User, die .exe Datei der Anwendung verschiebt und aufruft, ändert sich doch auch der StartupPath, wenn dies oft genug gemacht wird ist die Registry vollkomen überladen, darum brauche ich ein System um sie "rein" zu halten! Ich dachte an folgendes:

bei jedem Schließen oder Starten alle Keys mit Namen "itunes-Screensaver" suchen und löschen, bis auf den mit dem aktuellen Startuppath. Ist das zu umständlich, nicht realisierbar o.ä??

mfg Christoph

_________________
1:<<Life sucks!!>> 2:<< Well okay>> 1: <<Just Yours>> 2:<<Ohmph>>
Trashkid2000
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 561
Erhaltene Danke: 137



BeitragVerfasst: Di 27.07.10 18:00 
Hi!

also, zu den Fragen:

zu 1.
Nein.der gleiche Schlüssel kann nicht 2 Mal angelegt werden, sondern wird, wenn er schon existiert, überschrieben.
Und damit hat sich die 2. Frage auch erledigt. Denn wenn Du immer beim Schließen den Pfad Deiner Anwendung in den Schlüssel schreibst, bleibt es trotzdem immer ein einziger Schlüssel. Also musst Du die Registry auch nicht aufräumen, auch wenn die Anwendung verschoben wurde.


Allerdings noch zwei Anmerkungen:

1. Auf den Key LOCAL_MACHINE hat man nur als Admin schreibenden Zugriff. Und das werden warscheinlich die wenigsten User sein, die Dein Programm ausführen. Also sollte man sowas in CURRENT_USER packen! Schon wegen Multiusersystemen, denn nicht jeder User dort will Deinen Screensaver haben. Und vor allen Dingen um die Methode eine Fehlerbehandlung.

2. Du solltest den Namen DEINES angelegten Schlüssels vielleicht anders benennen, z.B.
Programmname + "_" + auf deiner Maschine erzeugte GUID.

So kann es nicht passieren, dass Dein Programm bei jemanden einen Schlüssel überschreibt, der eine Software installiert hat, die sich genauso wie Deine nennt und einen gleichen Schlüssel in RUN nutzt. Das wäre nämlich nicht nett und auch nicht wünschenswert.

So, fertig mit dem Roman.

LG, Marko

Für diesen Beitrag haben gedankt: Namenlosnameless
Namenlosnameless Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 259
Erhaltene Danke: 6

Windows XP Home Edition, Windos Vista
C#
BeitragVerfasst: Di 27.07.10 19:59 
Danke für deine Antwort!

Das ist gut zu wissen!

Ich nutze auch die System.IO Klasse und muss auch da als Admin zugreifen, darum habe ich die "Manifest-als Admin ausführen"-Methode gewählt!

_________________
1:<<Life sucks!!>> 2:<< Well okay>> 1: <<Just Yours>> 2:<<Ohmph>>