【发布时间】:2019-04-03 12:16:00
【问题描述】:
我遇到了一个奇怪的问题。当 Windows 开始菜单中的项目被拖到应用程序上时,它会崩溃。
但是,如果我从资源管理器中拖动一个文件,它会被正确处理(当它在我的应用程序上时,拖动的项目会显示一个红色圆圈,并带有一条线)。
这就是奇怪的事情发生的地方。现在我已经尝试从资源管理器中拖动文件,当我尝试从“开始”菜单中拖动项目时,程序不会崩溃。仅当应用程序启动后的第一个拖动项来自“开始”菜单时,它才会崩溃。
窗口和其中的所有控件都有AllowDrop="False"。我尝试在最外面的控件上为DragOver 和DragEnter 添加事件处理程序,但断点永远不会被命中。
这是我得到的例外:
Managed Debugging Assistant 'FatalExecutionEngineError' : '运行时遇到致命错误。错误地址位于线程 0x59f4 上的 0xc789d078。错误代码为 0x80131623。此错误可能是 CLR 中的错误或用户代码的不安全或不可验证部分中的错误。此错误的常见来源包括 COM-interop 或 PInvoke 的用户封送错误,这可能会损坏堆栈。'
随后出现此异常:
System.ExecutionEngineException: 'System.ExecutionEngineException' 类型的异常被抛出。'
应用程序退出。
我使用的是 Windows 10 和 64 位。 .NET 框架 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
【问题讨论】:
-
尝试进入选项->调试->输出窗口->WPF跟踪设置。选择要完全记录的所有属性。也许您会在崩溃前看到一些错误消息。
-
您是否尝试过以管理员身份运行应用程序?
-
@Rekshino 我现在尝试以管理员身份运行,但没有发生崩溃。我想这可能有助于缩小问题的范围。编辑:再想一想,也许不是,因为您不能将项目拖到以管理员模式运行的应用程序上。但我想这与在我的应用程序中使用“AllowDrop=False”的处理方式不同。
标签: .net wpf drag-and-drop crash executionengineexception