C# 如何解决windows崩溃错误
我的应用程序在客户端应用程序文件夹中创建一个exe,并尝试从那里运行它。即使exe运行正常,功能没有受到干扰,我还是会看到一个崩溃弹出窗口,其中包含以下详细信息。同样的东西在我们的开发和测试机器中工作,没有崩溃弹出窗口 为了暂时解决这个问题,我找到的唯一办法是如下设置注册表项C# 如何解决windows崩溃错误,c#,winforms,C#,Winforms,我的应用程序在客户端应用程序文件夹中创建一个exe,并尝试从那里运行它。即使exe运行正常,功能没有受到干扰,我还是会看到一个崩溃弹出窗口,其中包含以下详细信息。同样的东西在我们的开发和测试机器中工作,没有崩溃弹出窗口 为了暂时解决这个问题,我找到的唯一办法是如下设置注册表项 HKEY_CURRENT_USER\Software\Microsoft\Windows\Windows Error Reporting DontShowUI =1 现在我不知道是什么导致了这个异常,因为唯一的提示是我在
HKEY_CURRENT_USER\Software\Microsoft\Windows\Windows Error Reporting DontShowUI =1
现在我不知道是什么导致了这个异常,因为唯一的提示是我在错误详细信息中找到的more.dll
,这不是我在项目中作为参考添加的内容。有没有更好的方法以编程方式解决这个问题,或者有人可以帮助我在这方面有更多的想法
Problem signature:
Problem Event Name: APPCRASH
Application Name: MNM_Interface.exe
Application Version: 1.0.0.0
Application Timestamp: 54eaf32a
Fault Module Name: more.dll
Fault Module Version: 1.2.1.0
Fault Module Timestamp: 54e2d422
Exception Code: c0000005
Exception Offset: 0040bb62
OS Version: 6.1.7601.2.1.0.256.4
Locale ID: 1033
Additional Information 1: 0a9e
Additional Information 2: 0a9e372d3b4ad19135b953a78882e789
Additional Information 3: 0a9e
Additional Information 4: 0a9e372d3b4ad19135b953a78882e789
Read our privacy statement online:
http://go.microsoft.com/fwlink/?linkid=104288&clcid=0x0409
If the online privacy statement is not available, please read our privacy statement offline:
C:\windows\system32\en-US\erofflps.txt
我不知道下面的事件查看器日志是否有帮助,但我认为专家们可以从中得到一些线索
Faulting application name: MNM_Interface.exe, version: 1.0.0.0, time stamp: 0x5523d05b
Faulting module name: more.dll, version: 1.2.1.0, time stamp: 0x54e2d422
Exception code: 0xc0000005
Fault offset: 0x0040bb62
Faulting process id: 0x1870
Faulting application start time: 0x01d0713b195e7b30
Faulting application path: C:\MNM\Pictures 1.1.0\MNM_Interface.exe
Faulting module path: C:\MNM\Pictures 1.1.0\more.dll
Report Id: 586ce056-dd2e-11e4-b2ce-08edb9de061e
您是否使用了一些程序使用的资源,如图标、位图、dll或其他类型,但目前它们不可用?
如果是-尝试删除它们,并查看程序将如何运行 正如@BJMyers所提到的,这是一个未处理的异常。您可以编写一个外部程序来测试/处理异常。您可以选择以下内容:
AppDomain.CurrentDomain.UnhandledException += UnhandledExceptionFunction;
private void UnhandledExceptionFunction(Object sender, UnhandledExceptionEventArgs args)
{
Exception ex = (Exception)(args.ExceptionObject);
System.Diagnostics.StackFrame frame = new System.Diagnostics.StackFrame(0);
string method;
method = frame.GetMethod().ReflectedType.FullName;
}
一个好的开始方法是查看
args
参数,以获取ExceptionType
。如果您想获得更多详细信息,例如导致异常的方法,可以查看StackFrame
类如果Windows应用程序中发生未处理的异常,Windows错误报告弹出窗口是默认行为。要获取用于调试的堆栈跟踪,请处理该事件。我有一个问题。我应该在调用exe的父应用程序中处理未处理的异常,还是在被调用的exe中处理它们;currentDomain.UnhandledException+=新的UnhandledExceptionEventHandler(DomainExceptionHandler);Application.ThreadException+=新系统.Threading.ThreadExceptionEventHandler(Application\u ThreadException);我试过上面的方法。我更改了我的exe以包含从program.cs main方法开始到结束的日志。所有日志都写得很好。catch块中未捕获任何异常,也不存在应用程序域异常或线程异常。所以基本上我无法阻止这个崩溃弹出。有什么需要帮助的吗?谢谢你的回复,但是我很抱歉我的回复被耽搁了。这是否意味着我需要在program.cs中为exe处理这个未处理的异常事件。我问的原因是它已经有了一个try-catch块,我有点困惑它为什么没有在那里被捕获。是的,你可以在你的程序中处理它。cs
。嗯,即使它确实有一个try catch块
,也不能保证捕获到异常。您可能已经为NullPointerException
编写了一个catch块,而实际上它抛出了一个DivideByZeroException
,类似的情况。此外,在配置文件中出现异常的情况下,即使在执行try-catch块之前也会引发异常。如果您已经知道异常,可以尝试在您编写的try-catch块中捕获它。正如我提到的,您可以使用上面的代码来获取异常类型。在当前场景中,我没有在catch块中处理特定的异常,因为它只是try{}catch(){},并且期望catch块处理try块中出现的任何异常。现在,如果我去添加AppDomain.CurrentDomain.UnhandledException+=UnhandledException函数,我相信这应该在static void main函数的program.cs中。我是rite吗?您是否尝试过调试并查看是否在catch块中捕获了异常?嗨,jmc,我已经将下面的代码放在program.cs中,并将很快在客户机上进行测试。AppDomain currentDomain=AppDomain.currentDomain;currentDomain.UnhandledException+=新的UnhandledExceptionEventHandler(DomainExceptionHandler);Application.ThreadException+=新系统.Threading.ThreadExceptionEventHandler(Application\u ThreadException);我没找到那样的东西