Entwickler-Ecke
Dateizugriff - Fehler bei Registry auslesen
del1312 - Di 03.06.03 18:14
Titel: Fehler bei Registry auslesen
Hi hab mal wieder ein Prob :oops:
Beim Form.Create kommt unteranderem folgender Code der aus der Registry einen Wert lesen soll. Allerdings kommt ne Fehlermeldung weil der Wert wohl noch nicht existiert. Hab versucht das mit try und exept abzufangen, aber es funzt nicht. Kommt immer noch :"Fehler beim holen der Daten aus Autosave" Sollte er eigentlich nicht dann den Wert lesen(entspricht Autosave) auf 1 eintragen?
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| regist:=TRegistry.Create; regist.RootKey:=HKEY_LOCAL_MACHINE; try regist.OpenKey('SOFTWARE\ECSpooky\Test\Version1.2', true); lesen:=regist.ReadInteger('Autosave'); except lesen:=1; end; regist.Free; |
Danke für Eure Hilfe!!!
mfg
ecspooky
Moderiert von
Tino: Code- durch Delphi-Tag ersetzt. Titel geändert.
Delete - Di 03.06.03 18:21
Ich schlage folgende Korrektur vor, die ein paar kleinere Problemchen behebt:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27:
| lesen := 1;
regist:=TRegistry.Create(KEY_READ); try regist.RootKey:=HKEY_LOCAL_MACHINE;
if regist.OpenKey('SOFTWARE\ECSpooky\Test\Version1.2',false) then begin lesen:=regist.ReadInteger('Autosave');
regist.CloseKey; end; finally regist.free; end; |
del1312 - Di 03.06.03 18:27
Oh man vielen vielen Dank für die schnelle und supi erklärten Hilfe!!! :D
Klappt wunderbar, also nochmal DANKE!
Hab noch ne Frage: Wie lösche ich dann wieder die Schüssel ?
mfg
ecspooky
Terra23 - Di 03.06.03 18:56
Löschen machst du mit DeleteKey. Und bei dir wäre auch hilfreich gewesen, wenn du einfach erst dann ausliest, wenn:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| Regist:=TRegistry.Create; Regist.RootKey:=HKEY_LOCAL_MACHINE; Regist.OpenKey('Software\ECSpooky\Test\Version1.2', True); If Regist.ValueExists('Autosave') Then Begin Try Lesen:=Regist.ReadInteger('Autosave'); Except Lesen:=1; End; Regist.Free; |
.. du es mit einer ValueExists-Abfrage gemacht hättest. :)
del1312 - Di 03.06.03 19:07
Hm aber die Variante darüber ist auch ok oder? Die läuft ja super.
Wegen dem löschen, ist das so ok?
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| regist:=TRegistry.Create; try regist.RootKey:=HKEY_LOCAL_MACHINE regist.DeleteKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Run\MeinProgramm'); finally regist.Free; end; end; |
Moderiert von
Tino: Code- durch Delphi-Tags ersetzt.
Delete - Di 03.06.03 20:04
Delphi-Quelltext
1: 2:
| Regist.RootKey:=HKEY_LOCAL_MACHINE; Regist.OpenKey('Software\ECSpooky\Test\Version1.2', True); |
So und wenn du das alles geschaft hast, dann speicherst du bitte deine Programmeinstellungen in HKCU und nicht HKLM, dann klappt das auch mit dem Schreiben als nicht Admin. :roll:
del1312 - Mi 04.06.03 01:06
Ok das mit HKCU und nicht HKLM ist klar ;o) Nur wie lösche ich jetzt meinen angelegte Zeichenfolge bzw Schlüssel?
Damit klappt es nicht:
Quelltext
1:
| regist.DeleteKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Run\MeinProg'); |
Delete - Mi 04.06.03 08:20
Ich nehme mal an, dass
Quelltext
1:
| SOFTWARE\Microsoft\Windows\CurrentVersion\Run |
der
Schlüssel und
der
Eintrag (= Value) deines Programms ist. Meinst du, dass man letzteren dann mit
DeleteKey entfernen kann? Oder glaubst du, man sollte lieber den Schlüssel öffnen und dann den Eintrag daraus entfernen? :wink:
Terra23 - Mi 04.06.03 13:52
@Mathias: Schon gut, ich gebe mich geschlagen. Vielleicht sollte ich aufmerksamer lesen, dann wäre DeleteKey nicht als Vorschlag rausgekommen, sondern eben die andere Variante zum Löschen von Values. :oops:
Delete - Mi 04.06.03 15:01
Du musst dich nicht entschuldigen. ecspooky hat ja gefragt:
| Zitat: |
| Wie lösche ich dann wieder die Schüssel ? |
Unter dem Gesichtspunkt war deine Antwort völlig korrekt, und ich hätte die selbe gegeben. Nur stellte sich dann ja später raus, dass er versucht, den
Eintrag seines Programms zu entfernen. Zu dem Zeitpunkt hatte ich also einfach nur mehr Informationen als du einen Tag zuvor. :)
Also, nix für ungut. Meine Kritik richtete sich übrigens auch nicht gegen dich sondern gegen ecspooky, der Schlüssel und Einträge durcheinander bringt.
del1312 - Mi 04.06.03 18:19
also ich fühl mich auch nicht als müßte ich mich entschuldigen oder schämen. ich weiss es halt nicht und deshalb frag ich ja hier :D
Also ich hab in das RegVZ:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\');
ne neue Zeichenfolge mit dem Wert z.B 'C:\Test.exe' Diese möchte ich nun löschen. Kannst du mir da bitte weiterhelfen?
mfg
ecspooky
Delete - Mi 04.06.03 20:01
Ich habe nicht gesagt, dass du dich schämen oder entschuldigen sollst. Du solltest nur deine Fragen von Anfang an verständlich formulieren. Lieber beim Posten Zeit lassen und noch mal Korrektur lesen als irgendwelchen Unsinn hinschmieren, der dann zu Missverständnissen und falschen Antworten führt.
Rein prinzipiell hast du alle Lösungsschritte bereits in den hier vorhandenen Postings drin -
Du weißt wie man einen Registry-Schlüssel öffnet, denn sonst könntest du mit deinem Programm überhaupt keine neue Zeichenfolge anlegen. Das wäre Schritt #1: den gewünschten Schlüssel öffnen.
Dann solltest du den Tipp von Terra23 beherzigen und mit ValueExists prüfen, ob deine Zeichenfolge überhaupt vorhanden ist. Dabei handelt es sich um eine Bool-Funktion, die TRUE oder FALSE zurückliefert.
Ist das Ergebnis TRUE, dann existiert der Eintrag, und du kannst ihn löschen. Und weil es ein Eintrag (= Value) ist, geht das nicht mit DeleteKey ... sondern logischerweise mit DeleteValue.
Gruß.
Terra23 - Mi 04.06.03 21:29
@Mathias: Eines muß ich klar stellen, schnell. Ich fühle mich überhaupt nicht von dir kritisiert und erst Recht nicht angegriffen. Das ist halt so der große Negativ-Punkt, wenn man nicht weiß, wie der andere so spricht. Vielleicht sollte ich ein :mrgreen: dahinter machen. :rofl: Das war nicht böse gemeint, sondern einfach nur als Gag, nach dem Motto: Asche auf mein Haupt. ;-)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 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!