Таинственное выполнение обработчика событий главной формы из модального диалога - и другие ошибки - PullRequest
2 голосов
/ 09 марта 2011

После перемещения приложения Delphi 2009 из среды Windows 2003 / Citrix в 64-разрядную среду Windows 2008 R2 (теперь пользователи используют RDP вместо Citrix), теперь появляются ошибки времени выполнения, в которых говорится: "Невозможно сделать видимое модальное окно «.

Пользователь открывает модальную форму. Затем каким-то образом запускается обработчик событий, который назначен элементу меню в основной форме . На основе стеков вызовов, похоже, что пользователь может вызвать пункт меню, нажав его ярлык.

Трассировка стека madExcept выглядит следующим образом:

main thread ($2dc):
004ffa88 +06c Ladelist.exe Forms            TCustomForm.ShowModal
0052f4ff +0bb Ladelist.exe DB               TDataSet.SetActive
008fc9a1 +089 Ladelist.exe u_ladeli 928 +16 TForm1.EditLoadingList
008fadec +070 Ladelist.exe u_ladeli 504  +5 TForm1.OpenLoadingListClick <- second
004d6e27 +0a7 Ladelist.exe Menus            TMenuItem.Click
004d857f +0ef Ladelist.exe Menus            DoClick
004d866b +087 Ladelist.exe Menus            TMenu.IsShortCut
005001c1 +04d Ladelist.exe Forms            TCustomForm.IsShortCut
004e8dc0 +068 Ladelist.exe Controls         TWinControl.IsMenuKey
004e8f89 +011 Ladelist.exe Controls         TWinControl.CNSysKeyDown
004e247e +2d2 Ladelist.exe Controls         TControl.WndProc
004e6983 +513 Ladelist.exe Controls         TWinControl.WndProc
004fb5e8 +594 Ladelist.exe Forms            TCustomForm.WndProc
004e20a4 +024 Ladelist.exe Controls         TControl.Perform
004856e0 +014 Ladelist.exe Classes          StdWndProc
004e609c +02c Ladelist.exe Controls         TWinControl.MainWndProc
004856e0 +014 Ladelist.exe Classes          StdWndProc
775b00e3 +02b ntdll.dll                     KiUserCallbackDispatcher
008fc9a1 +089 Ladelist.exe u_ladeli 928 +16 TForm1.EditLoadingList
008fadec +070 Ladelist.exe u_ladeli 504  +5 TForm1.OpenLoadingListClick <- first
004d6e27 +0a7 Ladelist.exe Menus            TMenuItem.Click
004d857f +0ef Ladelist.exe Menus            DoClick
004d866b +087 Ladelist.exe Menus            TMenu.IsShortCut
005001c1 +04d Ladelist.exe Forms            TCustomForm.IsShortCut
004e8dc0 +068 Ladelist.exe Controls         TWinControl.IsMenuKey
004e8e0d +01d Ladelist.exe Controls         TWinControl.CNKeyDown
004e247e +2d2 Ladelist.exe Controls         TControl.WndProc
004e6983 +513 Ladelist.exe Controls         TWinControl.WndProc
004fb5e8 +594 Ladelist.exe Forms            TCustomForm.WndProc
004e20a4 +024 Ladelist.exe Controls         TControl.Perform
004e609c +02c Ladelist.exe Controls         TWinControl.MainWndProc
004856e0 +014 Ladelist.exe Classes          StdWndProc
775b00e3 +02b ntdll.dll                     KiUserCallbackDispatcher
753c3675 +010 kernel32.dll                  BaseThreadInitThunk

Второй пример:

main thread ($4c94):
004ffa88 +06c Ladelist.exe Forms                    TCustomForm.ShowModal
0052f4ff +0bb Ladelist.exe DB                       TDataSet.SetActive
008fc9a1 +089 Ladelist.exe u_ladeli         928 +16 TForm1.EditLoadingList
008fbacd +085 Ladelist.exe u_ladeli         765 +11 TForm1.SearchShipmentClick
004d6e27 +0a7 Ladelist.exe Menus                    TMenuItem.Click
004d857f +0ef Ladelist.exe Menus                    DoClick
004d866b +087 Ladelist.exe Menus                    TMenu.IsShortCut
005001c1 +04d Ladelist.exe Forms                    TCustomForm.IsShortCut
004e8dc0 +068 Ladelist.exe Controls                 TWinControl.IsMenuKey
004e8f89 +011 Ladelist.exe Controls                 TWinControl.CNSysKeyDown
004e247e +2d2 Ladelist.exe Controls                 TControl.WndProc
004e6983 +513 Ladelist.exe Controls                 TWinControl.WndProc
004fb5e8 +594 Ladelist.exe Forms                    TCustomForm.WndProc
004e20a4 +024 Ladelist.exe Controls                 TControl.Perform
004856e0 +014 Ladelist.exe Classes                  StdWndProc
004e609c +02c Ladelist.exe Controls                 TWinControl.MainWndProc
004856e0 +014 Ladelist.exe Classes                  StdWndProc
772b00e3 +02b ntdll.dll                             KiUserCallbackDispatcher
008fc9a1 +089 Ladelist.exe u_ladeli         928 +16 TForm1.EditLoadingList
008fadec +070 Ladelist.exe u_ladeli         504  +5 TForm1.OpenLoadingListClick
004d6e27 +0a7 Ladelist.exe Menus                    TMenuItem.Click
004d857f +0ef Ladelist.exe Menus                    DoClick
004d866b +087 Ladelist.exe Menus                    TMenu.IsShortCut
005001c1 +04d Ladelist.exe Forms                    TCustomForm.IsShortCut
004e8dc0 +068 Ladelist.exe Controls                 TWinControl.IsMenuKey
004e8e0d +01d Ladelist.exe Controls                 TWinControl.CNKeyDown
0067ead1 +03d Ladelist.exe cxControls               TcxControl.CNKeyDown
007b2351 +019 Ladelist.exe cxGridCustomView         TcxGridSite.CNKeyDown
004e247e +2d2 Ladelist.exe Controls                 TControl.WndProc
004e885c +01c Ladelist.exe Controls                 TWinControl.WMNCHitTest
004e247e +2d2 Ladelist.exe Controls                 TControl.WndProc
004e6983 +513 Ladelist.exe Controls                 TWinControl.WndProc
0067ef6c +11c Ladelist.exe cxControls               TcxControl.WndProc
007b2b1f +01b Ladelist.exe cxGridCustomView         TcxGridSite.WndProc
004e609c +02c Ladelist.exe Controls                 TWinControl.MainWndProc
004856e0 +014 Ladelist.exe Classes                  StdWndProc
772b00e3 +02b ntdll.dll                             KiUserCallbackDispatcher
76973675 +010 kernel32.dll                          BaseThreadInitThunk

Обновление:

Windows Server 2008 R2 с пакетом обновления 1 теперь установлен. Но такие же странные ошибки происходят. У нас также часто бывают такие ошибки:

exception class   : EAccessViolation
exception message : Zugriffsverletzung bei Adresse 5E9E19ED in Modul 'audiodev.dll'. Schreiben von Adresse 5E9E19ED.

thread $3068:
5e9e19ed +00 audiodev.dll
0045146d +0d PDFView.exe  madExcept CallThreadProcSafe
00451b77 +37 PDFView.exe  madExcept UserWorkItemExceptFrame
75543398 +10 kernel32.dll           BaseThreadInitThunk

и

exception class   : EAccessViolation
exception message : Zugriffsverletzung bei Adresse 74DC1E3D in Modul 'wkscli.dll'. Schreiben von Adresse 74DC1E3D.

thread $1eb8:
74dc1e3d +000 wkscli.dll
758e0165 +160 RPCRT4.dll             NdrClientCall2
74dc2dce +032 wkscli.dll             NetWkstaGetInfo
6a142162 +007 ntlanman.dll           NPOpenEnum
6a1a2f9a +094 MPR.dll                WNetOpenEnumW
0045146d +00d PDFView.exe  madExcept CallThreadProcSafe
00451b77 +037 PDFView.exe  madExcept UserWorkItemExceptFrame
77193398 +010 kernel32.dll           BaseThreadInitThunk

и

exception message : Zugriffsverletzung bei Adresse 70841F8E in Modul 'olmapi32.dll'. Schreiben von Adresse 70841F8E.

main thread ($5978):
70841f8e +000 ???
005cade0 +654 PDFView.exe  JclMapi      65 +0 TJclEmail.InternalSendOrSave
005cb140 +004 PDFView.exe  JclMapi      65 +0 TJclEmail.Send

и

класс исключений: EAccessViolation сообщение об исключении: Zugriffsverletzung bei Adresse 565014FD в модуле wpdshext.dll. Schreiben von Adresse 565014FD.

нить $ 3960: 565014fd +00 wpdshext.dll 76efc511 + 4c SHLWAPI.dll QISearch 0045146d + 0d PDFView.exe madExcept CallThreadProcSafe 00451b77 +37 PDFView.exe madExcept UserWorkItemExceptFrame 77193398 +10 kernel32.dll BaseThreadInitThunk

Похоже, что они связаны с использованием элемента управления ActiveX Acrobat (версия X) в этом приложении, поэтому я буду исследовать в этом направлении. Однако ошибки в исходном отчете о проблемах, приведенном выше, появляются в приложении, которое не использует Acrobat.

1 Ответ

1 голос
/ 17 марта 2011

О !!У меня только что была эта проблема с Windows 2008. Он обнаружил, что это проблема Windows, о которой хорошо сообщают другие пользователи по всему миру.Microsoft выпустила некоторые исправления, но ни одно из них не сработало, как ожидалось.Наконец, Microsoft выпустила пакет обновления 1 (SP1), и теперь он работает как шарм.

Итак, установите исправления ошибок Windows 2008 R2 SP1 Windows 2008 R2

...