![]() |
Absturz im Save / Open Dialog
Hallo Zusammen,
Wir haben in unserer Software momentan vermehrt Abstürze, wenn ein User einen Open oder Save Dialog öffnen möchte. Diese Abstürze passieren nicht reproduzierbar und nur manchmal. Nach vielem debuggen und suchen habe ich festgestellt, dass dies etwas mit dem "InitialPath" zu tun haben könnte. Bei vielen Kunden hat es eine Verbesserung gebracht, wenn ich den InitialPath fest auf ein Verzeichnis gesetzt habe, von dem ich weiß dass es existiert. Das ist allerdings auch nur ein Workarround für etwas das meiner Meinung nach funktionieren sollte. Lustigerweise ist mir eine andere Software die wir gekauft haben heute abgestrüzt, die offenbar a) mit Delphi programmiert ist und b) MadExcept nutzt. Anhand des CallStacks kann ich sehen, dass auch diese Software auf die gleiche Art und Weise beim öffnen des Dialogs abstürzt als auch unsere. Weiß jemand zufällig ob der Open / Save Dialog buggy ist oder wie man das beheben kann? Anbei mal ein Beispiel Callstack. Wie man sieht, sitzt der Fehler offenbar tief in VCL / Windows API. ".Start" ist der letzte Teil meines Source-Codes, dort wird das Execute vom Dialog aufgerufen.
Code:
Die Fehlermeldungen sind immer anders, der Callstack immer gleich:
77720196 +00e ntdll.dll NtWaitForMultipleObjects
76f215f1 +0fa KERNELBASE.dll WaitForMultipleObjectsEx 755f1a03 +089 kernel32.dll WaitForMultipleObjectsEx 77710107 +02b ntdll.dll KiUserCallbackDispatcher 75e6f5b7 +00e USER32.dll WaitMessage 75e6ce85 +031 USER32.dll DialogBoxIndirectParamAorW 75e6cc09 +016 USER32.dll DialogBoxIndirectParamW 0066469f +3ab Prog.exe Vcl.Dialogs TCustomFileDialog.Execute 00661451 +199 Prog.exe Vcl.Dialogs TFileDialogWrapper.Execute 006620ae +0d6 Prog.exe Vcl.Dialogs TOpenDialog.DoExecute 0066243b +00f Prog.exe Vcl.Dialogs TSaveDialog.Execute 00660ad1 +035 Prog.exe Vcl.Dialogs TCommonDialog.Execute 01152ee8 +160 Prog.exe gtFRXportIntf 393 +16 TgtFRXport_Base.Start
Code:
Unsere Software wurde mit XE6 und Seattle 10 kompiliert, beide Versionen führen zu dem Verhalten.
Zugriffsverletzung bei Adresse 60561493 in Modul 'FunDisc.dll'. Ausführung von Adresse 60561493.
oder Zugriffsverletzung bei Adresse 609412D0 in Modul 'msxml6.dll'. Ausführung von Adresse 609412D0. |
AW: Absturz im Save / Open Dialog
|
AW: Absturz im Save / Open Dialog
Das ist kein Fehler deiner Software sondern (fast immer) ein Fehler/Problem einer sogenannten Shell-Extension.
Wenn du nach "FunDisc.dll" suchst findest du z.B. ![]() |
AW: Absturz im Save / Open Dialog
Wow das ging schnell.
Vielen Dank! :thumb: |
AW: Absturz im Save / Open Dialog
Hallo Zusammen,
Ich hole diesen Thread noch mal nach oben. Ich habe auf den betroffenen Kundensystemen nun den Hotfix aus dem Beitrag vom Technet installiert. Dieser hat allerdings keine Besserung gebracht. Mittlerweile taucht das Problem bei immer mehr Kunden auf. Ich vermute dass ein Windows Update etwas verändert hat, das dieses Verhalten nun vermehrt hervorruft. Die Gemeinsamkeit ist der MS Windows 2008 R2 Server und dass es Kundensysteme sind, die diesen Server als Terminalserver nutzen. Nach ein bisschen googlen bin ich auf dieses Flag gestoßen:
Delphi-Quellcode:
Ich habe mir im MSDN durchgelesen was dieses Flag macht und wann man es nicht einsetzen soll. Als ein Punkt wird dort aufgezählt, dass man keine INI Dateien verwenden darf. Ist damit gemeint, dass man generell keine Einstellungen in einer INI Datei verwenden darf? Mein Programm nutzt nämlich eine INI Datei im Programmverzeichnis um sich Einstellungen zu merken, die dann über TMemIni gelesen / geschrieben werden.
{$SetPEOptFlags IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE}
Beim Absturz wird übrigens jedes Mal eine andere DLL gemeldet: - FunDisc - msxml6 - tquery - u.s.w. MSDN Link: ![]() |
AW: Absturz im Save / Open Dialog
Ich will mich nicht zu weit aus dem Fenster lehnen, aber ich vermute, dass Ini-Dateien nur dann Probleme machen, wenn man mit den nativen Win32-Funktionen wie WritePrivateProfileString u.a. darauf zugreift, was TIniFile tut. AFAIK ist TMemIniFile aber ein Delphi-Eigengewächs, das intern mit Stringlisten arbeitet, das könnte funktionieren, denn Inis sind ja auch nur Text.
|
AW: Absturz im Save / Open Dialog
Wenn Microsoft das schreibt, dann meinen die garantiert ihre Windows-INI-API.
![]() ![]() TMemIniFile bassiert auf einer TStringList. ![]() Zitat:
|
AW: Absturz im Save / Open Dialog
Hab ich was anderes gesagt? :roll:
|
AW: Absturz im Save / Open Dialog
Keine Ahnung, die Redbox meinte es gäbe noch keine Antworten, bzw. sie sagte nix. :stupid:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:23 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