Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Prog läuft unter 2000/XP nicht richtig

Empfohlene Antworten

Veröffentlicht

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

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

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*

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

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

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

das funzt auch nicht, ist aber nicht so schlimm.

bei version steht dann ne 0, das ist egal.

das doofe ist ja, das ich nix angezeigt bekomme bei den ersten beiden prozeduren.

das ist das hauptprob.

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

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

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.