Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi RegistryKey auf Existenz prüfen funktioniert nicht (Konsole) (https://www.delphipraxis.net/141475-registrykey-auf-existenz-pruefen-funktioniert-nicht-konsole.html)

ephedrine 9. Okt 2009 17:42


RegistryKey auf Existenz prüfen funktioniert nicht (Konsole)
 
Hallo,

ich wollte heute ein wenig für den Informatikunterricht üben, und hab mich mal mit Registry-Einträgen beschäftigt.
Seit einigen Stunden google ich quer durchs Netz und finde keine Antwort auf mein Problem:

Ich möchte in meiner Konsolenanwendung einen Registry-Schlüssel auf Existenzprüfen, und wenn er nicht existiert, ihn dann anlegen. Ich weiß, dass man ihn auch einfach so anlegen könnte (denn wenn er existiert, wird er ja nicht überschrieben), aber es geht um's Prinzip, da ich das für ein späteres Programm benötige.

Leider werden alle Befehle nach der Überprüfung ignoriert :(

Delphi-Quellcode:
if Regist.KeyExists('Software\Test\') = true then
 begin
  WriteLn('Eintrag existiert');
  sleep(4000);
 end
  else
   try
     regist.OpenKey('Software\Test\', true);
     regist.WriteInteger('Test1', c);
     regist.WriteInteger('Test2', d);
   finally
    regist.free;
     WriteLn('Eintrag angelegt');
     sleep(4000);
Wenn ich das Programm jetzt starte, beendet es sich einfach wieder. Der Sleep-Befehl wird völlig ignoriert. Der Eintrag in der Registry wird auch nicht angelegt. Nehme ich die Überprüfung "if Regist.KeyExists" raus, wird der Key jedoch zumindest angelegt. Also nehme ich mal an, dass das Programm ab der Überprüfung alle Befehle ignoriert.
Was habe ich übersehen?

Viele Grüße
Fabian

Luckie 9. Okt 2009 17:52

Re: RegistryKey auf Existenz prüfen funktioniert nicht (Kons
 
Um welchen Hive geht es? Welche Rechte hat das Programm? Warum zeigst du uns nur den halben Code? Denn irgendwo muss ja das Registry-Objekt erstellt werden.

ephedrine 9. Okt 2009 17:57

Re: RegistryKey auf Existenz prüfen funktioniert nicht (Kons
 
Es fehlt der Kopf des Codes:

Delphi-Quellcode:
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  WinInet,
  ShellApi,
  Registry;

var a,b: string;
    c,d: integer;
 regist: TRegistry;

Luckie 9. Okt 2009 17:59

Re: RegistryKey auf Existenz prüfen funktioniert nicht (Kons
 
Es fehlt immer noch der Konstruktor (Create) und das Setzen des Hives (HKLM; HKCU, ...). Und die Frage, welche Rechte dein Programm hat, hast du auch nicht beantwortet. Desweiteren gib die Methode OpenKey einen Wahrheitswert zurück, den man prüfen kann. Der Try--Except-Block ist an dieser Stelle falsch.

isilive 11. Okt 2009 02:36

Re: RegistryKey auf Existenz prüfen funktioniert nicht (Kons
 
So wie Luckie schon richtig geschrieben hat:

Erst .create
dann den Hive setzen - mit Rootkey.
und dann den Schlüssel setzen mit Openkey.
Wenn du den 2. Parameter auf false setzt dann legt er einen nichtexistenten Schlüssel auch nicht an und der Rückgabewert sagt dir ob's den Schlüssel gibt (denke ich).

Oder du fragst hier mit keyexists ab.

dann close und free.

Dass das Programm alles aber der Überprüfung ignoriert kann ich mir nicht vorstellen. Die If Abfrage sollte es korrekt durchlaufen. Du kannst dir das auch mit dem Debugger von Delphi anschauen. Setze einen Breakpoint mit F5 und Steppe dann mit F7 durch.

Überarbeite das mal alles und poste was rauskommt! :mrgreen:


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:21 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz