Entwickler-Ecke
IO, XML und Registry - Muss ich prüfen ob RegistryKey existiert?
Namenlosnameless - Di 27.07.10 15:24
Titel: Muss ich prüfen ob RegistryKey existiert?
Hallo!
Ich will meine Anwendung bei jedem Starten von Windows ausführen. Das funktioniert auch wunderbar:
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
Trashkid2000 - Di 27.07.10 17: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
Namenlosnameless - Di 27.07.10 18: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!
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!