AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi RegistryKey auf Existenz prüfen funktioniert nicht (Konsole)
Thema durchsuchen
Ansicht
Themen-Optionen

RegistryKey auf Existenz prüfen funktioniert nicht (Konsole)

Ein Thema von ephedrine · begonnen am 9. Okt 2009 · letzter Beitrag vom 11. Okt 2009
Antwort Antwort
ephedrine

Registriert seit: 9. Okt 2009
2 Beiträge
 
#1

RegistryKey auf Existenz prüfen funktioniert nicht (Konsole)

  Alt 9. Okt 2009, 17:42
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
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: RegistryKey auf Existenz prüfen funktioniert nicht (Kons

  Alt 9. Okt 2009, 17:52
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
ephedrine

Registriert seit: 9. Okt 2009
2 Beiträge
 
#3

Re: RegistryKey auf Existenz prüfen funktioniert nicht (Kons

  Alt 9. Okt 2009, 17:57
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;
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

Re: RegistryKey auf Existenz prüfen funktioniert nicht (Kons

  Alt 9. Okt 2009, 17:59
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von isilive
isilive

Registriert seit: 15. Okt 2008
Ort: Österreich
192 Beiträge
 
Delphi 2009 Professional
 
#5

Re: RegistryKey auf Existenz prüfen funktioniert nicht (Kons

  Alt 11. Okt 2009, 02:36
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!
Stefan
Jedoch kann die referenzbasierte Implementierung des Standard-Objektmodells in Kombination mit den komplexen syntaktischen Dereferenzierungsregeln bei einer objektorientierten API wie ein Stolperstein wirken.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:26 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