Delphi-PRAXiS
Seite 7 von 9   « Erste     567 89      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Registry-Probleme unter Vista (https://www.delphipraxis.net/111025-registry-probleme-unter-vista.html)

DeddyH 28. Mär 2008 20:19

Re: Registry-Probleme unter Vista
 
Zitat:

Zitat von Daniel
Nur ist sie eben mittlerweile von der Realität überholt worden.

Unsere Rede seit Beginn des Threads, aber wir sind ja unqualifiziert. OK, bin ja schon still :duck:

Luckie 28. Mär 2008 20:35

Re: Registry-Probleme unter Vista
 
Zitat:

Zitat von Daniel
Die Klasse "TRegIniFile" imitiert die Schnittstellen der guten, alten INI-Datei.

Das wollte ich eigentlich damit ausdrücken.

wido 28. Mär 2008 20:37

Re: Registry-Probleme unter Vista
 
Zitat:

Zitat von Daniel
An der tatsächlich verrichteten Arbeit ist nichts auszusetzen, nur sind die Möglichkeiten, auf diesen Vorgang einzuwirken, viel zu gering.

Sorry da jetzt OT werden zu müssen, aber an der dort verrichteten Arbeit ist sehr wohl was auszurichten. Immerhin werden alle Registry Operationen auf den Rootkey ausgeführt, wenn der beim Create übergebene Pfad zum Schreiben nicht geöffnet werden konnte. Ist vielleicht durchaus nur ein subtiler Bug, dafür sind die Ausmaße im Falle eines Auftretens umso größer. Ich verweise da nochmal an den von mir aufgezeichneten Selbstversuch. Aber wahrscheinlich würde niemand jemals darauf kommen "Software" oder einen beliebigen anderen Subkeynamen als Section Name bei TRegIniFile zu verwenden ...

Daniel 28. Mär 2008 20:49

Re: Registry-Probleme unter Vista
 
Is' ja gar nicht so off-topic.

Ich kann den von Dir angesprochenen Fehler momentan nicht entdecken. Hier mal der Auszug aus der .WriteInteger-Methode:

Delphi-Quellcode:
CreateKey(Section);
  Key := GetKey(Section);
  if Key <> 0 then
  try
    OldKey := CurrentKey;
    SetCurrentKey(Key);
    try
      inherited WriteString(Ident, IntToStr(Value));
    finally
      SetCurrentKey(OldKey);
    end;
  finally
    RegCloseKey(Key);
  end;
Zeile 1: Key wird erzeugt, wenn nicht vorhanden
Zeile 2: Key wird abgefragt und ...
Zeile 3: ... nur dann, wenn Key existiert, wird der folgende Code ausgeführt.

Ich sehe das als prinzipiell richtig an - ohne jetzt diese Klasse als Ganzes verteidigen zu wollen.

DeddyH 28. Mär 2008 20:52

Re: Registry-Probleme unter Vista
 
Ööhhmm.. OK, und wie weißt Du nun, ob es geklappt hat?

Daniel 28. Mär 2008 20:54

Re: Registry-Probleme unter Vista
 
Ob es geklappt hat? Och, das ist das Problem des Anwenders. *g*.

Ich war auf wido scharf ... also auf das von ihm angesprochene Problem:

Zitat:

Immerhin werden alle Registry Operationen auf den Rootkey ausgeführt, wenn der beim Create übergebene Pfad zum Schreiben nicht geöffnet werden konnte.
Das konnte ich aus dem Code nicht nachvollziehen.

wido 28. Mär 2008 21:01

Re: Registry-Probleme unter Vista
 
Könntest Du dann mal bitte folgendes probieren?

Kleine Testapp:

Delphi-Quellcode:
program Project1;

{$APPTYPE CONSOLE}

uses
  registry;

begin
  with TRegIniFile.Create('Software\TestEntry\Test') do
    begin
      WriteString('Subkey', 'Bla', 'Blubb');
      Free;
    end;
readln;
  with TRegIniFile.Create('Software\TestEntry\Test') do
    begin
      WriteString('Subkey', 'Bla', 'Blubb');
      Free;
    end;
readln;
  with TRegIniFile.Create('Software\TestEntry\Test') do
    begin
      WriteString('Subkey', 'Bla', 'Blubb');
      Free;
    end;
readln;
end.
Starten, Registry Editor aufmachen, nach HKCU\Software gehen und die Rechte für den Zugriff auf TestEntry entfernen (Rechtsklick, Berechtigungen, Erweitert, "Vererbbare Berechtigungen einschließen" deaktivieren, Entfernen und den Dialog mit OK bestätigen). Dann Return in der Testapp und den View im Registry Editor aktualisieren. Der Section Name "Subkey" sollte jetzt als Unterschlüssel des Rootkeys HKCU erstellt worden sein inkl. der erwarteten Werte. Wenn Du dort die Rechte auch entfernst wie zuvor, kommt die Exception, die eigentlich vorher schon hätte kommen müssen: "Failed to create key subkey.".

Wäre interessant das mal zu tracen. Hab nur leider keine Sourcen, entsprechend kann ichs nicht selbst testen.

Daniel 28. Mär 2008 21:06

Re: Registry-Probleme unter Vista
 
Hut ab. Das Szenario spielt sich so ab wie von Dir beschrieben. Danke für die Demonstration.
Das ist böse - gerade beim Löschen wird's spaßig.

Okay. Die Klasse gehört auf den Müll.

DeddyH 28. Mär 2008 21:07

Re: Registry-Probleme unter Vista
 
Ihr könnt mich schizophren paranoid nennen, aber ich habe mir angewöhnt, meist Bool' sche Funktionen zu schreiben oder solche Prozeduren, die einen Var-Parameter für evtl. ErrorCodes enthalten. Das zumindest dann, wenn man später auf eine fehlerfreie Abarbeitung vertrauen muss. Das erscheint zwar im ersten Moment viel Schreibarbeit, hilft aber später evtl. enorm bei der Fehlersuche.

[edit] Krankheiten verwechselt :oops: [/edit]

Dezipaitor 28. Mär 2008 23:51

Re: Registry-Probleme unter Vista
 
Zitat:

Zitat von DeddyH
Ihr könnt mich schizophren nennen, aber ich habe mir angewöhnt, meist Bool' sche Funktionen zu schreiben oder solche Prozeduren, die einen Var-Parameter für evtl. ErrorCodes enthalten. Das zumindest dann, wenn man später auf eine fehlerfreie Abarbeitung vertrauen muss. Das erscheint zwar im ersten Moment viel Schreibarbeit, hilft aber später evtl. enorm bei der Fehlersuche.

Wenn du das selbst so machst ist das ok, nach meiner Meinung. Aber wenn das jemand anderes Verwenden soll, dann kann ich dir garantieren, dass der bool-Wert ignoriert wird.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:01 Uhr.
Seite 7 von 9   « Erste     567 89      

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