Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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

Geschrieben

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 !)

Geschrieben

danke für die antwort,

das wars leider nicht.

er insgesamt 9 registry einträge auslesen.

findet er den nicht, soll er schreiben, das nix da ist.

bei 98 klappen alle neun, bei 2000/XP nur die ersten 6.

da lässt er einfach alles leer.

hoffe, das war so halbwegs verständlich? *g*

Geschrieben

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

Geschrieben

nee, bei der letzten procedure geht das nicht so einfach, die variable ist ja als DWORD deklariert, welche ja ein integer typ ist.

wie das klappt, hab ich noch nicht raus.

eigentlich geht es dann nur um die ersten beiden prozeduren.

unter 98 funzen die, nur unter 2000/XP halt nicht...

Geschrieben

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".

Geschrieben

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

Geschrieben

juhu paulaner, das wars. vielen dank.

also die ersten beiden proceduren klappen, die dritte nicht, aber das wird schon noch.

ich schlag dich mal meinem chef als neuer ausbildungsbetreuer vor. ;o)

grüße aus koblenz nach ravensburg.

fred

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...