После перемещения приложения 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.