AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Registry-Probleme unter Vista

Ein Thema von Popov · begonnen am 28. Mär 2008 · letzter Beitrag vom 5. Apr 2008
Antwort Antwort
Seite 3 von 9     123 45     Letzte »    
OregonGhost

Registriert seit: 8. Jun 2002
Ort: Lübeck
1.216 Beiträge
 
Delphi 3 Professional
 
#21

Re: Registry-Probleme unter Vista

  Alt 28. Mär 2008, 11:57
Als Ergänzung zu Luckies Beitrag:
Zitat von Popov:
Also, Eintrag soll in Registry gespeichert werden, tut es unter Vista nicht, was daran willst du loggen? Dein Einwand ergibt keinen Sinn.
Jeder einzelne Funktionsaufruf unter Windows gibt einen Fehlercode zurück und dieser Fehlercode ist, im Zweifel zusammen mit GetLastError, eine präzise Beschreibung dessen, was genau schiefgelaufen ist. "Er wird nicht geschrieben" ist keine solche Beschreibung. "Er wird nicht geschrieben, weil die erforderlichen Rechte fehlen" wäre eine exakte Beschreibung und übrigens auch ein erstklassiger Suchbegriff. Du spekulierst einfach so vor dich hin, warum es nicht funktioniert und hoffst, dass irgendjemand dir einen Tipp gibt. Und beschimpfst bei der Gelegenheit alle Leute, die dir tatsächlich Tipps geben, wie du dem Fehler auf die Spur kommen könntest. Wenn dir ein Tipp nicht gefällt, ignoriere ihn.

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.
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
  Mit Zitat antworten Zitat
wido

Registriert seit: 2. Jan 2006
122 Beiträge
 
#22

Re: Registry-Probleme unter Vista

  Alt 28. Mär 2008, 11:57
Zitat von Popov:
Ich merke, daß Antworten zu 99% aus unsinnigen und unnötigen Zeugs bestehen. Also, Eintrag soll in Registry gespeichert werden, tut es unter Vista nicht, was daran willst du loggen? Dein Einwand ergibt keinen Sinn.
Besonders hübsch wie Du alles in try Blöcke einschließt in deiner Unit, damit auch ja niemals eine Fehlermeldung, die sinnvolle Hinweise geben könnte, angezeigt wird.

Ansonsten hat Luckie bereits das gepostet, was ich schreiben wollte. Ich hab mich nur vorher mit deiner Unit aufgehalten .
  Mit Zitat antworten Zitat
OregonGhost

Registriert seit: 8. Jun 2002
Ort: Lübeck
1.216 Beiträge
 
Delphi 3 Professional
 
#23

Re: Registry-Probleme unter Vista

  Alt 28. Mär 2008, 12:02
Zitat von wido:
Zitat von Popov:
Ich merke, daß Antworten zu 99% aus unsinnigen und unnötigen Zeugs bestehen. Also, Eintrag soll in Registry gespeichert werden, tut es unter Vista nicht, was daran willst du loggen? Dein Einwand ergibt keinen Sinn.
Besonders hübsch wie Du alles in try Blöcke einschließt in deiner Unit, damit auch ja niemals eine Fehlermeldung, die sinnvolle Hinweise geben könnte, angezeigt wird.
Ich hatte vorhin gar nicht gesehen, dass der Quellcode angehängt war. In meinem Team hätte man für so einen Code eine stundenlange Standpauke bekommen. Exception Swallowing in Reinkultur und nichtmal Rückgabewerte, die auf einen Fehlerfall schließen lassen. Und dann wunderst du, Popov, dich wirklich darüber, was man loggen könnte und warum du nicht auf den Fehler kommst?
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
  Mit Zitat antworten Zitat
Benutzerbild von user0815
user0815

Registriert seit: 5. Okt 2007
331 Beiträge
 
Delphi XE2 Professional
 
#24

Re: Registry-Probleme unter Vista

  Alt 28. Mär 2008, 12:09
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
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#25

Re: Registry-Probleme unter Vista

  Alt 28. Mär 2008, 12:15
Zitat von Luckie:
Damit überprüfst du zwar ob die Funktion fehlgeschlagen ist oder nicht, hift dir aber bei der fehlersuche nicht weiter. Du sollste es so machen:
Delphi-Quellcode:
if Registry.OpenKey(...) then
begin
  ...;
  ...;
end
else
begin
  ShowMessage(SysErrorMessage(getLastError)); // oder entsprechend eine Exception werfen.
end;
Jetzt nicht falsch verstehen, aber das ist es was ich meine. Ich bin wirklich einer, der sehr wenig fragt. In der Regel antworte ich. Wenn ich aber frage, dann schreibe ich eigentlich alle nötigen Informationen, damit keine Rückfragen nötig sind. Das Problem ist, daß sie eigentlich nie gelesen werden, und das ärgert mich dann.

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:
  with TRegIniFile.Create('Programmname') do
  try
    S := ReadString(Section, Ident, Default)
  finally
    Free
  end;
Da gibt es nichts um es falsch zu machen. Und der try finally ist nur aus Höflichkeit da.

Wie du siehst geht es hier nicht um Fehler. Du kannst dir den Quellcode angucken und mir die Fehler zeigen.

Zitat:
Zitat:
Du bist ein sehr bedauernswerter Mensch. ...
Bitte klärt eure persönlichen Differenzen per E-Mail oder PN.
Um ehrlich zu sein habe ich keine Ahnung was der Typ von mir will. Ich kann mich nicht erinnern je mit ihm im Leben zu tun gehabt zu haben. Wenn, dann habe ich den schon längst vergessen. Wenn er nichts besseres zu tun hat als sich nach einem Jahr an EINE unfreundliche Antwort zu errinnen, als ultra extrem nachtragend zu sein, vielleicht sollte er dann sich professionelle Hilfe besorgen.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#26

Re: Registry-Probleme unter Vista

  Alt 28. Mär 2008, 12:25
Ach und was passiert, wenn das
Delphi-Quellcode:
procedure WriteIniString(Section, Ident, Value: String);
begin
  with TRegIniFile.Create(RegFile) do try
    WriteString(Section, Ident, Value)
  finally Free end;
end;
zum Beispiel fehlschlägt? Und jetzt sag mir nicht, das kann nicht fehlschlagen, denn das tut es ja offenbar.

Desweiteren:
Zitat:
TRegIniFile enables handling the Windows 95/NT system registry as if it were a Windows 3.x INI file.
Ich glaube, du solltest doch mal auf TRegistry zurückgreifen und wenn es nur zum Testen ist, denn TRegIniFile scheint für mich schon mehr als veraltet zu sein.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
wido

Registriert seit: 2. Jan 2006
122 Beiträge
 
#27

Re: Registry-Probleme unter Vista

  Alt 28. Mär 2008, 12:27
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
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#28

Re: Registry-Probleme unter Vista

  Alt 28. Mär 2008, 12:50
Zitat von Luckie:
Ach und was passiert, wenn das
...
zum Beispiel fehlschlägt?
Nichts. Es gibt keine Fehlermeldung, es wird nur nichts gespeichert. Es steht dir frei nach dem Speichern zu überprüfen ob der Wert gespeichert wurde, aber sonst gibt es keine Fehlermeldung. Um ganz ehrlich zu sein weiß ich auch nicht was da schiefgehen könnte, bis auf, daß die Festplatte voll ist. Aber auch dann gibt es keine Meldung von der der Routine. Noch nie erlebt.

Zitat:
Und jetzt sag mir nicht, das kann nicht fehlschlagen, denn das tut es ja offenbar.
Wie ich schon gesagt habe nutze ich den Code seit 6 Jahren ohne je nur eine einziege Fehlermeldung gehabt zu haben oder, daß der Code nicht funktioniert hat. Allerdings kann ich das nur für XP sagen. Auch haben nicht alle Visa Nutzer Probleme, nur einige.

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:
Desweiteren:
Zitat:
TRegIniFile enables handling the Windows 95/NT system registry as if it were a Windows 3.x INI file.
Ich glaube, du solltest doch mal auf TRegistry zurückgreifen und wenn es nur zum Testen ist, denn TRegIniFile scheint für mich schon mehr als veraltet zu sein.
Ich merke, daß du dich mit TRegIni nicht auskennst. Das Zitat von dir sagt nichts anderes, als daß TRegIni so einfach funktioniert wie früher die Ini unter Windows 3.x. Das bezieht sich lediglich auf die Arbeitsweise. Die TRegIni greift selbst auf die TRegistry:

  TRegIniFile = class(TRegistry) 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.

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
  Mit Zitat antworten Zitat
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#29

Re: Registry-Probleme unter Vista

  Alt 28. Mär 2008, 13:42
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:
Ich muss zustimmen. Popov, deine tolle, 6 Jahre alte Unit ist offenbar nicht in der Lage, ihre eigenen Funktionen auf Fehlerfälle zu überprüfen.
Meinst du die EasyRegAppexe.pas ?
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
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:
if Registry.OpenKey(...) then
begin
  ...;
  ...;
end
else
  ...
Ich mag persönlich solchen Code überhaupt nicht. Man muss schon sehr schreibwütig sein, um soetwas auszuschreiben. Und wenn dann noch
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:
if Registry.CreateKey(...) then
begin
  ...;
  ...;
end
else
  ...
Der Code ist nach dem CreateKey-Design einfach falsch. Die Delphi-Hilfe sagt dazu folgendes:

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:
try
  Registry.CreateKey(...)
except
  on E : ERegistryException do
    ....
end;
Im Gegensatz dazu wirft TRegistry.OpenKey keine Exception.


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)
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.197 Beiträge
 
Delphi 10.4 Sydney
 
#30

Re: Registry-Probleme unter Vista

  Alt 28. Mär 2008, 14:54
Zitat von Popov:
Wie ich schon gesagt habe nutze ich den Code seit 6 Jahren ohne je nur eine einziege Fehlermeldung gehabt zu haben oder, daß der Code nicht funktioniert hat. Allerdings kann ich das nur für XP sagen. Auch haben nicht alle Visa Nutzer Probleme, nur einige.
Dann frag doch nach ob sie UAC aktiv haben oder nicht.

Zitat von Popov:
Es geht hier also weniger drum ob mein Code einen Fehler hat als der Frage ob Windows unter bestimmten Umständen das Speichern verweigert.
Ja. Genau wie es schon seit Windows NT der Fall ist wenn der Admin u.U. auch hier entsprechende Rechte setzt. Dürfte aber sehr sehr selten sein.

Zitat von Popov:
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.
Vista entzieht "nur" einem gestarteten Prozess alle Admin-Rechte wenn UAC aktiv ist. Wenn das Programm kein erweitertes Manifest hat so wird auch entsprechend Dateisystem und Registry virtualisiert.
Schreibst du u.U. mit einem Prozess in die Registry und ein anderes liest es aus?
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 9     123 45     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:21 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