Zum Inhalt springen

Prog läuft unter 2000/XP nicht richtig


Psycho Fred

Empfohlene Beiträge

Hallo Leutz,

ich hab ein Prog, das bestimmte Registry Einträge ausliest.

Das tut es unter Win 98 auch fehlerfrei, nur bei 2000/XP nicht ganz.

zwei von drei prozeduren funktionieren, nur die dritte nicht.

hier der quelltext dazu:

PMa: String[200]; {PM Prüfungsvariablen}

PMb: String[200];

PMc: Dword;

rocedure TForm1.readPMa;

var reg: TRegistry;

begin

reg:=TRegistry.Create;

try

Reg.RootKey := HKEY_LOCAL_MACHINE;

if Reg.OpenKey ('Software\CG\DentalDirect\PraxisMaterial', TRUE) then

if reg.valueexists('Bin') then

PMa := Reg.ReadString('Bin')

else PMa := 'Kein Schlüssel vorhanden'

finally

Reg.CloseKey;

Reg.Free;

end;

end;

procedure TForm1.readPMb;

var reg: TRegistry;

begin

reg:=TRegistry.Create;

try

Reg.RootKey := HKEY_LOCAL_MACHINE;

if Reg.OpenKey ('Software\CG\DentalDirect\PraxisMaterial', TRUE) then

if reg.valueexists('DBPath') then

PMb := Reg.ReadString('DBPath')

else PMb := 'Kein Schlüssel vorhanden'

finally

Reg.CloseKey;

Reg.Free;

end;

end;

procedure TForm1.readPMc;

var reg: TRegistry;

begin

reg:=TRegistry.Create;

try

Reg.RootKey := HKEY_LOCAL_MACHINE;

if Reg.OpenKey ('Software\CG\DentalDirect\PraxisMaterial', TRUE) then

if reg.valueexists('CurrentVersion') then

PMc := Reg.ReadInteger('CurrentVersion')

finally

Reg.CloseKey;

Reg.Free;

end;

end;

Form2.Label12.Caption := PMa;

Form2.Label13.Caption := PMb;

Form2.Label14.Caption := inttostr(PMc);

ist da irgendwas drin, was unter 2000/XP nicht klappen kann?

programm ist mit Delphi 6 geschrieben.

danke im voraus für eure hilfe.

fred

Link zu diesem Kommentar
Auf anderen Seiten teilen

Könntest du etwas genauer sagen, was da nicht klappt ?

Kommt eine Fehlermeldung, findet er den Schlüssel nicht oder was passiert da ?

BTW: Deklarier deine String-Variablen einfach mit "string" und nicht mit "string[n]", kann u.U. Fehler geben, wenn du einen String>n zuweisen willst (Der Win2000/XP-Bug im QReport kommt von sowas !)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Also bei der letzten procedure passiert gar nichts, wenn OpenKey fehlschlägt, bei den anderen zwei setzt er den String auf den Fehlertext. Du mußt den Fall behandlen, wenn OpenKey false zurückgibt !

also ungefähr so:

if Reg.OpenKey ('Software\CG\DentalDirect\PraxisMaterial', TRUE) then

if reg.valueexists('CurrentVersion') then

PMc := Reg.ReadInteger('CurrentVersion')

else Form2.Label4.Caption := 'Kein Schlüssel !';

finally

Reg.CloseKey;

Reg.Free;

end;

Das mit den string-Variablen war auch nicht direkt auf dein Problem bezogen, wäre es das gewesen, hätte dich dein Compiler mit Fehlermeldungen bombardiert ! :D

Link zu diesem Kommentar
Auf anderen Seiten teilen

Mach es z.B. so:

if Reg.OpenKey ('Software\CG\DentalDirect\PraxisMaterial', TRUE) then

if reg.valueexists('CurrentVersion') then

PMc := Reg.ReadInteger('CurrentVersion')

else PMc := -1;

....

if PMc=-1 then Form1.Label14.Caption := 'Kein Schlüssel !';

Ich vermute, daß der Schlüssel unter 2k/XP nicht erzeugt werden kann, daher gibt OpenKey false zurück, und genau auf diesen Fall mußt du reagieren. Ich gehe mal davon aus, daß die Versionsnummer nicht -1 lauten kann, und verwende diesen Wert als "Fehler-Flag".

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich hab das zwar nicht ausprobiert (ich glaub auch nicht, daß das laufen würde), aber manche Zustände werden in deinem Prog gar nicht abgefangen, ich würds so ähnlich machen:

binValue: string;

dbPathValue: string;

versionValue: string;

procedure TForm1.readPMa;

var reg: TRegistry;

begin

reg:=TRegistry.Create;

try

Reg.RootKey := HKEY_LOCAL_MACHINE;

//bei true wird der Schlüssel angelegt, wollen wir das wirklich ?

if Reg.OpenKey ('Software\CG\DentalDirect\PraxisMaterial', FALSE) then

begin

if reg.valueexists('Bin') then

binValue := Reg.ReadString('Bin')

else binValue := 'Kein Wert vorhanden !';

end

else binValue := 'Kein Schlüssel vorhanden';

finally

Reg.CloseKey;

Reg.Free;

end;

end;

procedure TForm1.readPMb;

var reg: TRegistry;

begin

//todo siehe code von readPMa

end;

procedure TForm1.readPMc;

var reg: TRegistry;

begin

try

Reg.RootKey := HKEY_LOCAL_MACHINE;

if Reg.OpenKey ('Software\CG\DentalDirect\PraxisMaterial', FALSE) then

begin

if reg.valueexists('CurrentVersion') then

versionValue := intToStr(Reg.ReadInteger('CurrentVersion'))

else versionValue := 'Kein Wert vorhanden !';

end

else versionValue := 'Kein Schlüssel vorhanden';

finally

Reg.CloseKey;

Reg.Free;

end;

Form2.Label12.Caption := binValue;

Form2.Label13.Caption := dbPathValue;

Form2.Label14.Caption := versionValue;

Jetzt weiß ich, warum ich mit IniFiles arbeite ! :D

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...