Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Probleme mit TRegistry Methoden unter Win 95! (https://www.delphipraxis.net/4587-probleme-mit-tregistry-methoden-unter-win-95-a.html)

Flox03 5. Mai 2003 15:05


Probleme mit TRegistry Methoden unter Win 95!
 
Hallo!

Ich benutze in meinem Programm u.a. die TRegistry Methode OpenKey('Mein Key',false)

Das funktioniert auch alles einwandfrei, auch auf anderen Rechnern mit Win 98. Wenn der key existiert liefert die Funktion true zurück andernfalls false. Wenn der Schlüssel da ist, lese ich die einzelnen Werte ein.

Habe jetzt aber mein Programm auf einem Win 95 Rechner installiert und mit erschrecken festgestellt, dass die Abfrage If not OpenKey('Mein Key',false) immer false ist, selbst dann, wenn der Schlüssel existiert.

Habe deshalb ein kl. registry-test-prog geschrieben und festgestellt, dass die TRegistry-funktionen
KeyExists
OpenKey('',false)
OpenKeyReadOnly

unter Win95 immer fehlschlagen, auch wenn der Schlüssel da ist. Nur OpenKey('',true) scheint zu funktionieren.
Ist das normal? Kann das sein? Ich meine, wozu gibts unter Win 95 ne Registry, wenn man auf diese nicht einwandfrei zugreifen kann??

Gibts andere Möglichkeiten auf die Registry zuzugreifen?? Gibt es evtl. einen Grund, warum die Funktionen dort nich funktionieren, den man leicht beheben kann???

Bin da echt am verzweifeln. Das arbeiten mit der Registry muss doch irgendwie möglich sein.


Noch zur besseren Erklärung:
Mein Install Programm benutzt CreateKey... danach ist der Schlüssel da, unter Win 98 sowie unter Win 95.

Wenn man dann das eigentliche Prog startet, wird in form.create meine function load_registry aufgerufen:
Code:
function load_registry:boolean;
var reg:TRegistry;
begin
  reg:=TRegistry.Create;
  reg.RootKey:=HKEY_LOCAL_MACHINE;
  if not reg.OpenKey('SOFTWARE\MyCompany\MYProduct\',false)then begin
    reg.Free;
    result:=false;
  end else begin
    result:=true;
 
    {hier werden die werte geladen.} 
   
     reg.Free
  end;
end;
Hier der Aufruf aus Form.create:
Code:
{...} 
if not load_registry then begin
      MessageBox(WindowHandle,'Fehler beim lesen der Registry-Schlüssel.'+#13+ 
                   'Stellen Sie sicher dass das Programm ordnungsgemäß installiert wurde.',
                   'Fehler!',MB_ICONEXCLAMATION or MB_OK);

{...}
Das hat aber als Ergebnis:
Win 95: MessageBox wird angezeigt, auch wenn Schlüssel da ist ----> load_registry=false;

Win 98: alles läuft einwandrei.

genauso schlägt unter Win 95 (wie oben schon geschrieben)
openKeyReadOnly
KeyExists

immer :!: fehl, auch wenn der Schlüssel 100%ig da ist.

Ich verstehs nicht... :?: :(

Wie gesagt, läuft auf mehreren Win 98 Rechnern einwandfrei...
...nur das dumme ist, grade auf dem Win 95 Rechner MUSS es laufen.

Woran kann es liegen? Wer weiß Rat?

MfG,
Flox03!

Luckie 5. Mai 2003 15:10

Grund kann ich dir auch nicht sagen. Aber probier doch mal den Zugriff über die direkten API aufrufe von den Registry-Funktionen. Tutorial dazu gibt es hier: http://www.luckie-online.de/delphi/win32apidl.shtml . Allerdings nur in der Download-Version, nicht online.

Flox03 5. Mai 2003 19:38

Liste der Anhänge anzeigen (Anzahl: 1)
jo, danke für den link... hat mir sehr geholfen. :)

Das registry test-prog, welches ich extra geschrieben hab, testet jetzt auch mit den WinAPI Funktionen.
Kann das leider nur noch nicht auf Win 95 testen... Hab ich nicht selber...

Wer das kleine Test-Proggy (mit QuellText) haben möchte, kann sich das gerne ziehen, habs als Attachment drangehängt..

Wäre gut, wenn jemand mit Win 95 hier wäre und das test-proggy mal laufen lassen könnte.
Das Prog erstellt nur einen Schlüssel in die registry und man testet dann mit 7 verschiedene Möglichkeiten auf den Schlüssel und/oder den Wert im Schlüssel zuzugreifen.

Was wäre eigentlich, wenn auch die WinAPI Funktionen mehr oder weniger bei Win 95 fehlschlagen?? Dann müsste doch das System eigentlich schrottreif sein?!?!?

Naja, hoffe mal das läuft mit den WinAPI Funktionen auf Win 95, ansonsten bleibt mir die etwas blöde Möglichkeit mit
registry.OpenKey('MyKey',true);
if registry.ValueExists('MyValue') then registry.read...
auf die registry zuzugreifen, denn openkey('',true) und ValueExists scheinen auf dem Win 95 System zu funktionieren (sieht jedendfalls so aus...)

Das Dumme daran ist nur, dass bei dieser Methode immer der Schlüssel erstellt wird,... auch wenn man keinen haben möchte...

MfG,
Flox03!

MathiasSimmack 6. Mai 2003 17:16

s. http://www.delphi-forum.de/viewtopic.php?t=10869, dann spare ich mir ein doppeltes Schreiben


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:11 Uhr.

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