Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Registry.WriteString > Typ in Registry falsch (https://www.delphipraxis.net/162293-registry-writestring-typ-registry-falsch.html)

himitsu 16. Aug 2011 14:59

Delphi-Version: XE

Registry.WriteString > Typ in Registry falsch
 
Moin,

mir ist hier jetzt schon ein paar mal etwas aufgefallen.

Und zwar wird über TRegistry.WriteString ein String in HKEY_CURRENT_USER\Software\... abgespeichert.
Der müßte ja nun als REG_SZ in der Registry rumgammeln.

Wenn nun aber in dem string ein Integer drin ist (StrToInt), dann passiert es manchmal, daß sich in der Registry urplötzlich ein REG_DWORD befindet.

Es gibt auch nur die eine globale Speicherfunktion, welche auf diese Werte zugreift und diese arbeitet immer mit WriteString.
Zwar existieren noch ein paar Überladungen für Integer und Boolean, aber diese leiten nur über IntToStr/BoolToStr an Erstere weiter.
Somit kann/darf es eben nur Strings geben. :gruebel:


So, das Ergbnis/Problem ist dann allerdings, daß hier nun TRegistry.ReadString voll durchdreht.
ERegistryException > Ungültiger Datentyp für '...'


Das Ganze passiert in unregelmäßigen nicht nachvollziehbaren Abständen und scheinbar nur bei Stringwerten ala '0' oder '1'.
(jedenfalls enthalten alle gefundenen REG_DWORD nur 0 oder 1 )

S.pas.s 16. Aug 2011 15:40

AW: Registry.WriteString > Typ in Registry falsch
 
Ich sehe immer ein REG_SZ. Ich habs mit 12345, 0x12345, 00012345 ausprobiert. Mit WriteString kriege ich immer REG_SZ - kein REG_DWORD.
Vielleicht gibt es noch andere Stellen im Program, welche in die registry schreiben?

himitsu 16. Aug 2011 16:59

AW: Registry.WriteString > Typ in Registry falsch
 
Zitat:

Zitat von S.pas.s (Beitrag 1117294)
Ich sehe immer ein REG_SZ. Ich habs mit 12345, 0x12345, 00012345 ausprobiert. Mit WriteString kriege ich immer REG_SZ - kein REG_DWORD.
Vielleicht gibt es noch andere Stellen im Program, welche in die registry schreiben?

Nee, es gibt keine anderen Stellen.
Und genau das ist ja das Problem ...
Eigentlich sollte es funktionieren und immer REG_SZ rauskommen,
aber alle paar Wochen/Monate ist der Wert plötzlich ein REG_DWORD.

Ist mir jetzt schon bestimmt 3-4 Mal passiert, daß ich auf diese Exception traf und vorhin hatte ich noch 5 andere Werte in der Registry entdeckt, wo das auch falsch ist.



Ach ja, Delphi XE + Windows Server 2008 R2 + MSTSC.

Luckie 16. Aug 2011 17:04

AW: Registry.WriteString > Typ in Registry falsch
 
Schreibt eventuell noch ein anderes Programm an die Stelle?

p80286 16. Aug 2011 17:04

AW: Registry.WriteString > Typ in Registry falsch
 
Und woher weißt Du, daß Du bzw. Dein Programm der einzige ist, der dort schreibt und liest?
z.B. Virenscanner treiben sich auch in der Registry herum, und wenn die "Fehler" berichtigen?

Gruß
K-H

(zwei Dumme ein Gedanke)

himitsu 16. Aug 2011 17:17

AW: Registry.WriteString > Typ in Registry falsch
 
Ich weiß nichtmal, ob hier ein Virenscanner drauf ist, aber ich glub nicht. :gruebel: (Cheffe ist nun auch schon weg)

Sind nur Windows Firewall und Windows Defender drauf ... persönlich hab ich da noch nichts mitbekommen oder was gehört, daß es damit solche Probleme gibt.

S.pas.s 16. Aug 2011 17:25

AW: Registry.WriteString > Typ in Registry falsch
 
Um dem Problem nachzugehen, müsstest Du einen Wächter schreiben, der alle paar Minuten den Registrywert ausliest (mit try .. except .. end) und eine Warnung abgibt, sobald der REG_SZ-Status geändert wurde.

Christian Seehase 16. Aug 2011 17:29

AW: Registry.WriteString > Typ in Registry falsch
 
Moin Himitsu,

ich weiss ja nicht, wie oft das Programm in den Key schreibt, aber auf einmal wieder der falsche Typ drinsteht, könntest Du ja mal auslesen, wann der Key das letzte Mal geändert wurde.
Damit könntest Du dann evtl. ermitteln, ob es Dein Programm ist, oder ein anderes.
Der Typ dürfte sich kaum spontan ändern, sondern der Wert müsste gelöscht und dann mit neuem Typ angelegt werden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:30 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