Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Registry lesen unter Vista schlägt fehl (https://www.delphipraxis.net/92944-registry-lesen-unter-vista-schlaegt-fehl.html)

Mazel 29. Mai 2007 10:20


Registry lesen unter Vista schlägt fehl
 
Hallo,

für mein Programm MyPC lesen ich ein paar Informationen aus der Registry aus oder zumindest versuche ich es auch unter Vista zum laufen zu bringen. Das Problem ist, dass manche Werte ausgelesen werden, wie die BuildLab andere nicht ausgelesen werden dann ist aber auch wieder der Unterschied auf welchem Vista (bei Ultimate scheint es nicht zu gehen, bei anderen Versionen doch - ich habe kein Vista, bin daher auf andere angewiesen), und andere Werte wiederum ein Wert zurückgeben den ich mir nicht erklären kann. Bei mir unter XP werden alle Werte korrekt ausgegeben. Hier erstmal der Code, so wie ich ihn bei einem Freund unter Vista Ultimate getestet habe:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  Reg: TRegistry;

begin
  Reg := TRegistry.Create(KEY_READ); // sollte das selbe sein wie Reg.Access := KEY_READ
  with Reg do
   try
    RootKey := HKEY_LOCAL_MACHINE;
    OpenKeyReadOnly('Software\Microsoft\Windows NT\CurrentVersion');
    // es sollte privat kommen aber Microsoft kommt
    ShowMessage(ReadString('RegisteredOrganization'));
    // BuildLab wird richtig ausgelesen
    ShowMessage(ReadString('BuildLab'));
    // es sollte der Name kommen aber leerer String kommt
    ShowMessage(ReadString('RegisteredOwner'));
    // selbe wie RegisteredOwner
    ShowMessage(ReadString('ProductID'));
   finally
    Reg.Free;
   end;
end;
Ich kan mir das nicht erklären besonders weil vollkommen andere Werte auftauchen, die dort nicht stehen.

Der Benutzer hat ein AdminAccount.

Hat jemand einen Rat? Ich hoffe es insgeheim. :angel2:

Gruß
Mazel

CCRDude 29. Mai 2007 10:47

Re: Registry lesen unter Vista schlägt fehl
 
Ist das zufälligerweise ein 64-bit-Windows?

Dann greift dein Code in Wirklichkeit auf Wow6432Node\Software\Microsoft\Windows NT\CurrentVersion zu.

Report No: 23429 (RAID: unavailable) Status: Closed
TRegistry causes a bunch of bugs when accessing 64 bit registries
http://qc.codegear.com/wc/qcmain.aspx?d=23429

Da bringt mit BDS 2006 nichtmal das manuelle Setzen des Flags für 64-Bit-Zugriff etwas, da OpenKeyReadOnly ziemlich aggressiv ist (Access wird intern fest gesetzt, statt nur Flags zu ändern, daher ist dein voriges Setzen der Access-Mask eh unwirksam).

Der Bug ist angeblich gefixt... kann jemand, der ein D11 benutzt, das bestätigen (inklusive Möglichkeit der 64-bit-Nutzung)?

Mazel 29. Mai 2007 11:18

Re: Registry lesen unter Vista schlägt fehl
 
Ja, er hat ein 64 bit Rechner.

Wie kann ich das aber nun umgehen?

Luckie 29. Mai 2007 11:20

Re: Registry lesen unter Vista schlägt fehl
 
Zitat:

Zitat von Mazel
Wie kann ich das aber nun umgehen?

Mit der Suche: http://www.delphipraxis.net/internal...t=registry+bit

CCRDude 29. Mai 2007 11:24

Re: Registry lesen unter Vista schlägt fehl
 
Mal ein paar Möglichkeiten, keine davon wirklich perfekt:
  • Registry per WinAPI benutzen, dann macht die AccessMask (KEY_WOW64_64KEY setzen) kein Problem.
  • Prüfen ob 64-bit-System, dann Prefix Wow6432Node\ in alle HKLM\Software-Pfade einfügen.
  • Registry.pas so patchen, daß Access-Maske bitweise bearbeitet wird.
  • Delphi 11 verwenden, wenn es dort wirklich behoben sein sollte.
  • Eigene von TRegistry abgeleitete Klasse schreiben und dort OpenKey/OpenKeyReadOnly mit korrektem AccessMask-Handling implementieren
  • Kann die JCL inzwischen 64 bit? Wollte da auf nen alten Beitrag nochmal antworten bzw. selber was beitragen *Knoten-in-Ohr-mach*
  • Um auf Luckies Ergänzung zu kommen: wenn OpenKey im Gegensatz zu OpenKeyReadOnly die AccessMask nicht zerstört, könnte KEY_WOW64_64KEY dort erhalten bleiben (edit: hab gerade noch in Registry.pas reingeschaut, OpenKey zerstört die AccessMask nicht, daher könnte das ein vorher gesetztes KEY_WOW64_64KEY akzeptieren)

Mazel 29. Mai 2007 21:20

Re: Registry lesen unter Vista schlägt fehl
 
Ich danke euch für die Informationen. :)
Das konnte ich vorher nicht wissen, da ich mich mit Wow64 noch nie beschäftigt habe.

Gruß
Mazel


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:20 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