Приложение WPF аварийно завершает работу, когда на него перетаскивают элемент из меню «Пуск»

Я столкнулся со странной проблемой. Когда элемент из меню «Пуск» Windows перетаскивается поверх приложения, происходит сбой.

Однако, если я перетаскиваю файл из проводника через него, он обрабатывается правильно (перетаскиваемый элемент отображает красный кружок с линией, проходящей через него, когда он находится над моим приложением).

И вот здесь происходит странная вещь. Теперь, когда я попытался перетащить файл из проводника через него, программа не вылетает, когда я пытаюсь перетащить элемент из меню «Пуск». Он вылетает только в том случае, если первый перетаскиваемый элемент после запуска приложения находится из меню «Пуск».

Окно и все элементы управления имеют AllowDrop="False". Я пробовал добавлять обработчики событий для DragOver и DragEnter на самом внешнем элементе управления, но точки останова никогда не срабатывают.

Это исключение, которое я получаю:

Помощник по управляемой отладке «FatalExecutionEngineError»: «Среда выполнения обнаружила фатальную ошибку. Адрес ошибки был 0xc789d078 в потоке 0x59f4. Код ошибки - 0x80131623. Эта ошибка может быть ошибкой в ​​CLR или в небезопасных или неподдающихся проверке частях пользовательского кода. Общие источники этой ошибки включают ошибки маршалинга пользователей для COM-взаимодействия или PInvoke, которые могут повредить стек. '

За этим следует исключение:

System.ExecutionEngineException: «Возникло исключение типа« System.ExecutionEngineException ».

И приложение закрывается.

Я использую Windows 10 и 64bit. .NET Framework 4.7.2

Стек вызовов:

  [External Code] 
DataExchange.dll!CWinRtTarget::DragOver(struct IDragDropArgsPriv *,struct IDragUIOverridePriv * *)  Unknown
rpcrt4.dll!Invoke()    Unknown
rpcrt4.dll!Ndr64StubWorker()    Unknown
rpcrt4.dll!NdrStubCall3()   Unknown
combase.dll!CStdStubBuffer_Invoke(IRpcStubBuffer * This, tagRPCOLEMESSAGE * prpcmsg, IRpcChannelBuffer * pRpcChannelBuffer) Line 1524   C++
rpcrt4.dll!CStdStubBuffer_Invoke()  Unknown
[Inline Frame] combase.dll!InvokeStubWithExceptionPolicyAndTracing::__l6::<lambda_76d9e92c799d246a4afbe64a2bf5673d>::operator()() Line 1907 C++
combase.dll!ObjectMethodExceptionHandlingAction<<lambda_76d9e92c799d246a4afbe64a2bf5673d> >(InvokeStubWithExceptionPolicyAndTracing::__l6::<lambda_76d9e92c799d246a4afbe64a2bf5673d> action, ObjectMethodExceptionHandlingInfo * pExceptionHandlingInfo, ExceptionHandlingResult * pExceptionHandlingResult, void *) Line 91    C++
[Inline Frame] combase.dll!InvokeStubWithExceptionPolicyAndTracing(IRpcStubBuffer * pMsg, tagRPCOLEMESSAGE *) Line 1905 C++
combase.dll!DefaultStubInvoke(bool bIsAsyncBeginMethod, IServerCall * pServerCall, IRpcChannelBuffer * pChannel, IRpcStubBuffer * pStub, unsigned long * pdwFault) Line 1974    C++
[Inline Frame] combase.dll!SyncStubCall::Invoke(IServerCall *) Line 2031    C++
[Inline Frame] combase.dll!SyncServerCall::StubInvoke(IRpcChannelBuffer *) Line 807 C++
[Inline Frame] combase.dll!StubInvoke(tagRPCOLEMESSAGE * pMsg, CStdIdentity * pStdID, IRpcStubBuffer *) Line 2257   C++
combase.dll!ServerCall::ContextInvoke(tagRPCOLEMESSAGE * pMessage, IRpcStubBuffer * pStub, CServerChannel * pChannel, tagIPIDEntry * pIPIDEntry, unsigned long * pdwFault) Line 1542    C++
[Inline Frame] combase.dll!CServerChannel::ContextInvoke(tagRPCOLEMESSAGE *) Line 1438  C++
[Inline Frame] combase.dll!DefaultInvokeInApartment(tagRPCOLEMESSAGE *) Line 3549   C++
[Inline Frame] combase.dll!ClassicSTAInvokeInApartment(ServerCall *) Line 3313  C++
combase.dll!AppInvoke(ServerCall * pServerCall, CServerChannel * pChannel, IRpcStubBuffer * pStub, void * pv, void * pStubBuffer, tagIPIDEntry * pIPIDEntry, WireLocalThis * pLocalb) Line 1688 C++
combase.dll!ComInvokeWithLockAndIPID(ServerCall * pServerCall, tagIPIDEntry * pIPIDEntry, bool * pbCallerResponsibleForRequestMessageCleanup) Line 2804 C++
[Inline Frame] combase.dll!ComInvoke(ServerCall *) Line 2326    C++
combase.dll!ThreadDispatch(ServerCall * pServerCall) Line 422   C++
combase.dll!ThreadWndProc(HWND__ * window, unsigned int message, unsigned __int64 wparam, __int64 params) Line 798  C++
user32.dll!UserCallWinProcCheckWow()    Unknown
user32.dll!DispatchMessageWorker()  Unknown
WindowsBase.ni.dll!00007ffbc7f8f138()   Unknown

person Walkingsteak    schedule 03.04.2019    source источник
comment
Попробуйте перейти в Параметры- ›Отладка-› Окно вывода- ›Настройки трассировки WPF. Выберите все свойства, чтобы они были полностью зарегистрированы. Возможно, вы увидите сообщения об ошибках незадолго до сбоя.   -  person Maciek Świszczowski    schedule 03.04.2019
comment
Вы пробовали запускать приложение от имени администратора?   -  person Rekshino    schedule 03.04.2019
comment
@Rekshino Я пробовал работать как администратор, и сбоя не произошло. Я думаю, это поможет сузить проблему. Изменить: если подумать, возможно, нет, поскольку вы не можете перетаскивать элементы в приложения, запущенные в режиме администратора. Но я предполагаю, что это обрабатывается иначе, чем в моем приложении AllowDrop = False.   -  person Walkingsteak    schedule 04.04.2019


Ответы (1)


Те же симптомы возникают на моем компьютере. То же самое верно для любого приложения, созданного WPF. Снова откройте меню «Пуск», чтобы исправить это.

person hide    schedule 11.04.2019