Re: Registry-Probleme unter Vista
Als Ergänzung zu Luckies Beitrag:
Zitat:
Und noch eine Ergänzung: Ich speichere meine Daten seit Ewigkeiten ohne Probleme in die Registry, wenn nötig (im .NET-Bereich landen die Dinge natürlich eher in einer appconfig und im Linuxbereich ist nix mit Registry). Auch unter Vista. Und wenn es fehlschlägt, weiß ich aufgrund der Fehlerbeschreibung auch schon, warum - oder das Programm trifft schon selbst entsprechende Maßnahmen. Der Fehler liegt also nicht bei Vista. |
Re: Registry-Probleme unter Vista
Zitat:
Ansonsten hat Luckie bereits das gepostet, was ich schreiben wollte. Ich hab mich nur vorher mit deiner Unit aufgehalten ;). |
Re: Registry-Probleme unter Vista
Zitat:
|
Re: Registry-Probleme unter Vista
Hi Popov,
ich habe das Programm eben unter Vista Ultimate einmal getestet. Es gab keine Probleme. Ich kann mir vorstellen das andere User evtl. nicht alle Vista Updates installiert haben, wäre zumindest ne Möglichkeit. Rapidshare Screenshot |
Re: Registry-Probleme unter Vista
Zitat:
Wie ich bereits geschrieben habe benutze ich TRegIni. Immer wenn ich nur die Optionen speichern will, benutze ich die TRegIni, da sie sehr einfach ist und ich mir jede menge Zeilen sparen kann. Die TRegIni greift immer nur auf einen Pfad der Registry, also ist der Code immer kurz. Das mit if Registry.OpenKey(...) then kann ich mir sparen, denn TRegIni hat sowas nicht, bzw. macht es intern. Deshalb können da auch keine Fehler vorkommen. Wie ich schon gesagt habe, der entsprechende Code ist 100% Error free. Auch eine Error-Routine ist nicht nötig. All das brauche ich nicht, denn es gibt keine Fehlermeldungen die ich abfangen könnte. Ein typischer Code siehst so aus:
Delphi-Quellcode:
Da gibt es nichts um es falsch zu machen. Und der try finally ist nur aus Höflichkeit da.
with TRegIniFile.Create('Programmname') do
try S := ReadString(Section, Ident, Default) finally Free end; Wie du siehst geht es hier nicht um Fehler. Du kannst dir den Quellcode angucken und mir die Fehler zeigen. Zitat:
|
Re: Registry-Probleme unter Vista
Ach und was passiert, wenn das
Delphi-Quellcode:
zum Beispiel fehlschlägt? Und jetzt sag mir nicht, das kann nicht fehlschlagen, denn das tut es ja offenbar.
procedure WriteIniString(Section, Ident, Value: String);
begin with TRegIniFile.Create(RegFile) do try WriteString(Section, Ident, Value) finally Free end; end; Desweiteren: Zitat:
|
Re: Registry-Probleme unter Vista
Achso, noch als kleiner Hinweis von wegen: "Ich will nicht testen, geb kein Geld aus blubb..."
Es gibt auch von Vista 180 Tage Trial Versionen und Virtual PC 2007 ist soweit ich mich erinnere kostenlos erhältlich. Ich weiß nicht ob es lizenzrechtlich einwandfrei wäre die Trial Version für Softwaretesting zu verwenden, aber denke mal es wäre zumindest mal eine Lektüre der EULA wert. Dafür benötigst Du nur eine Vista Installations DVD. Wenn Du keine DVD hast, gibts bei MS auch fertige Virtual PC Images zum Download. Die laufen allerdings nur 30 Tage: http://www.microsoft.com/downloads/d...DisplayLang=en |
Re: Registry-Probleme unter Vista
Zitat:
Zitat:
Es geht hier also weniger drum ob mein Code einen Fehler hat als der Frage ob Windows unter bestimmten Umständen das Speichern verweigert. Ich weiß, daß Windows Vista ja diesen Pseudoadmin nutz mit dem man auch als Admin sicher arbeiten kann. Meine Frage zielte also eher drauf aus ob Vista hier versucht die Registry zu schützen. Zitat:
Delphi-Quellcode:
Es ist nur eine abgeleitete Klasse die erlaubt genauso einfach mit der Registry wie mit der Ini zu arbeiten. Wenn man auf die ganze Registry zugreifen will, dann kommt man nicht um die TRegistry und OpenKey usw. herum. Wenn man nur Einstellungen speichern will, dann reicht TRegIniFile.
TRegIniFile = class(TRegistry)
Um ehrlich zu sein müßtest du ein großer Fan der Klasse sein, da ich mich erinnern kann wie sehr dir missfällt wenn ein Programm in der Registry speichert. TRegIniFile speichert nur in einem einzigen Pfad. Das Reinigen der Registry ist also ganz leicht ;) |
Re: Registry-Probleme unter Vista
Und derjenige, der noch nie selbst Fehlerpfade ignoriert hat, der werfe den ersten Stein.
Ich erwarte heute keine Tiefflieger! Also hier mein Senf: 1. @Popov. Dein Programm funktioniert bei mir! Es muss also woanders happern. Wenn dein Programm Freeware ist, dann solltest du uns zumindest den Programm/Source-Link geben. Der eine oder andere wird es sicher unter Vista testen. Ein Text "geht nicht unter Vista" genügt leider nicht. Wenn du es alleine schaffen willst, dann ist Logging in eine Datei eine sehr gute Alternative. Du könntest z.B. für die harten Fälle Eurekalog kaufen. Das kostet nicht die Welt (wie manch andere hochgelobte Software hier) und kann dir sogar ne Email schicken, wenn bei jemandem etwas schiefgegangen ist (wenn derjenige es will). Für einfaches Logging kannst du aber auch entweder etwas selbst machen, oder du verwendest z.B. JwsclLogging.pas von http://blog.delphi-jedi.net/security-library 2. @all: Wenn Popop sich kein Vista kaufen will, dann muss das doch als Antwort genügen. Aber einfach festzulegen, dass man es haben MUSS, wenn man ein Programm nur leicht dafür anpassen will, ist für mich unverständlich. Unverständlich daher, weil es bereits viele solcher Fragen hier gab und keiner sich darüber aufgeregt hat. Das was man ihm vorwerfen kann ist schon in Punkt 1 abgehakt. 3. Ich erwarte keine steinige Luft. Rückggabewerte werden eben gerne ignoriert und Eingabewerte werden überhaupt nicht oder nicht vollständig überprüft. Wäre das nicht so, könnte man heute nicht mehr in Softwaresysteme einbrechen (Buffer overflow). 4. Zitat:
Normal ist es doch andersherum, oder? Der Benutzer einer Unit/Bibliothek muss die Fehlerfälle überprüfen, die in einer Lib-Funktion auftreten. Es gibt nur selten Fehler, die abgefangen werden können und damit es erlauben, die Funktion fortsetzen zu lassen. Eine Lib-Funktion kann nicht für meine Idee (was ich damit vorhabe) die Fehler abfangen. Exceptions sind extra so entworfen worden, damit sie an den nächsten Aufrufer zurückgegeben werden können. Meine ganze Bibliothek JWSCL steht (und fällt) mit diesem Prinzip. Nur die allerwenigsten Funktionen haben wirklich einen Rückggabewert. Ich gehe sogar noch weiter und werfe eine bestimmte Exception immer dann, wenn eine Windows Funktion fehlschlägt. Da ich nicht für alle GetLastError Meldungen eine Exception designen kann, gebe ich eben noch die Fehlernummer an. Borland/CG macht es mit EOleSysError genauso (wobei ich das misslungen finde, da ich keine positiven Werte abfangen kann: S_FALSE *argh*). 5.Stichwort: Fehlerbehandlung und beschreibung. Ich kenne keine Anwendung, die das vollständig durchzieht. Würde man das machen, und es trete ein Fehler auf, dann müsste man nicht nur in verständlichen Worten den Fehler beschreiben, sondern auch noch eine Lösung dem Benutzer präsentieren. Schaut euch mal die unter Windows möglichen Fehlercodes an. Ich habe sie hier alle aufgelistet: http://blog.delphi-jedi.net/2008/03/...ut-no-warranty Ich bezweifle schon, dass man ansatzweise dieses Problem lösen könnte. Man sollte nur die bekannten Exceptions/Fehler abfangen und behandeln. Den Rest kann man abfließen und damit das Programm abstürzen lassen. Hu? Absturz? Schlimme Sache!? Schlimmer wäre es, wenn das Programm nach einem abgefangenen aber unbekannten Fehler einfach weiterläuft und mir meine Daten durcheinander bringt. Da ich alle paar Minuten speichere, ist das Ungespeicherte verschmerzbar. BlueScreens unter Windows funktionieren nach diesem Prinzip. Würde ein Amok-Treiber weiterlaufen könnte das höchstwahrscheinlich mehr Schaden anrichten als ein paar verlorene Daten. Es gibt natürlich die rühmliche Ausnahme, wo Menschenleben auf dem Spiel steht (Raumschiff, Lebenserhaltung, ...). Aber die wird nicht mit Delphi programmiert (Stichwort: ADA) 6. "Exception swallowing". Ich muss zugeben, dass hab ich bis jetzt noch nie gehört. Aber schon der Laut hört sich nicht gut an :D Wäre google das Internet, dann müsste ich nun sagen, dass die Wortkombination nicht sehr bekannt ist. Trotzdem habe ich eine nette Abhandlung des Themas gefunden. http://pragmati.st/2006/11/22/how-to-abuse-exceptions Leider ist es nicht Delphi (mir egal), aber man kann trotzdem etwas lernen. Wer seine englisch Kenntnisse noch ausweiten möchte, der sollte dann das im Blog anfangs erwähnte PDF lesen. 7.
Code:
Ich mag persönlich solchen Code überhaupt nicht. Man muss schon sehr schreibwütig sein, um soetwas auszuschreiben. Und wenn dann noch
if Registry.OpenKey(...) then
begin ...; ...; end else ... der eXtended Syntax $X aktiv ist, dann meckert nichtmal der Compiler über ignorierte Rückgabewerte. Deshalb nehme ich gerne Exceptions, da hier im Fehlerfall der Programmcode mir auf den Zehen landet. Es gibt einen ähnlichen Fall in TRegistry, der mich sehr verwundert hat, als ich mir den TRegistry Code angeschaut habe:
Code:
Der Code ist nach dem CreateKey-Design einfach falsch. Die Delphi-Hilfe sagt dazu folgendes:
if Registry.CreateKey(...) then
begin ...; ...; end else ... CreateKey gibt true zurück, wenn die Erzeugung erfolgreich ist. Im Fehlerfall wird eine Exception ausgelöst. Der Versuch, einen bereits vorhandenen Schlüssel erneut zu erzeugen, hat keine Auswirkung. D.h. wenn ein Fehler auftaucht, dann ist der Rückgabewert zwar FALSE, jedoch wird der Else-Zweig garnicht erreicht, da schon eine Exception erzeugt wird. Ich frage mich wirklich, wer auf diese Schnapssidee gekommen ist, eine Funktion den Fehlerwert per Rückgabewert UND Exception zu übermitteln. Da denkt man einmal an alles, nur nicht die Hilfe zu lesen.
Code:
Im Gegensatz dazu wirft TRegistry.OpenKey keine Exception.
try
Registry.CreateKey(...) except on E : ERegistryException do .... end; 8. Ich hatte mal eine Frage in einer Newsgroup von einem großen Konzern gestellt. Diese Frage war jedoch bereits auf ähnliche Art und Weise in einer anderen Newsgroup derselben Firma gestellt worden. Ich wurde freundlich darauf hingewiesen. Jemand hatte diese Frage bereits gestellt, und genau dieser Jemand hatte mir auch geantwortet. Die Antwort bestand aus drei Worten (übersetzt): "merkwürdige Frage! Nein?" Meine Antwort darauf, dass er doch dieselbe Frage, aber woanders gestellt hätte und was denn daran so merkwürdig wäre, hat er dann so quittiert : "Das ist keine gewöhnliche Frage...". Verstanden? Nein? Ich auch nicht. Was ich damit meine ist, dass man sich im Internet nichts zu Herzen gehen lassen sollte. Nicht aufregen, und die Zeit stattdessen für bessere Dinge verwenden. (Z.b. Software verbessern oder http://blog.delphi-jedi.net besuchen) |
Re: Registry-Probleme unter Vista
Zitat:
Zitat:
Zitat:
Schreibst du u.U. mit einem Prozess in die Registry und ein anderes liest es aus? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:31 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