![]() |
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 ) |
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? |
AW: Registry.WriteString > Typ in Registry falsch
Zitat:
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. |
AW: Registry.WriteString > Typ in Registry falsch
Schreibt eventuell noch ein anderes Programm an die Stelle?
|
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) |
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. |
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.
|
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 06:56 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