AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Registry lesen unter Vista schlägt fehl

Ein Thema von Mazel · begonnen am 29. Mai 2007 · letzter Beitrag vom 29. Mai 2007
Antwort Antwort
Benutzerbild von Mazel
Mazel

Registriert seit: 11. Nov 2005
Ort: Leipzig
831 Beiträge
 
#1

Registry lesen unter Vista schlägt fehl

  Alt 29. Mai 2007, 10:20
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.

Gruß
Mazel
Marcel Jänicke
www.mj-software.net
  Mit Zitat antworten Zitat
CCRDude
(Gast)

n/a Beiträge
 
#2

Re: Registry lesen unter Vista schlägt fehl

  Alt 29. Mai 2007, 10:47
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)?
  Mit Zitat antworten Zitat
Benutzerbild von Mazel
Mazel

Registriert seit: 11. Nov 2005
Ort: Leipzig
831 Beiträge
 
#3

Re: Registry lesen unter Vista schlägt fehl

  Alt 29. Mai 2007, 11:18
Ja, er hat ein 64 bit Rechner.

Wie kann ich das aber nun umgehen?
Marcel Jänicke
www.mj-software.net
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: Registry lesen unter Vista schlägt fehl

  Alt 29. Mai 2007, 11:20
Zitat von Mazel:
Wie kann ich das aber nun umgehen?
Mit der Suche: http://www.delphipraxis.net/internal...t=registry+bit
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
CCRDude
(Gast)

n/a Beiträge
 
#5

Re: Registry lesen unter Vista schlägt fehl

  Alt 29. Mai 2007, 11:24
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)
  Mit Zitat antworten Zitat
Benutzerbild von Mazel
Mazel

Registriert seit: 11. Nov 2005
Ort: Leipzig
831 Beiträge
 
#6

Re: Registry lesen unter Vista schlägt fehl

  Alt 29. Mai 2007, 21:20
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
Marcel Jänicke
www.mj-software.net
  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 10:35 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