Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何解决windows崩溃错误_C#_Winforms - Fatal编程技术网

C# 如何解决windows崩溃错误

C# 如何解决windows崩溃错误,c#,winforms,C#,Winforms,我的应用程序在客户端应用程序文件夹中创建一个exe,并尝试从那里运行它。即使exe运行正常,功能没有受到干扰,我还是会看到一个崩溃弹出窗口,其中包含以下详细信息。同样的东西在我们的开发和测试机器中工作,没有崩溃弹出窗口 为了暂时解决这个问题,我找到的唯一办法是如下设置注册表项 HKEY_CURRENT_USER\Software\Microsoft\Windows\Windows Error Reporting DontShowUI =1 现在我不知道是什么导致了这个异常,因为唯一的提示是我在

我的应用程序在客户端应用程序文件夹中创建一个exe,并尝试从那里运行它。即使exe运行正常,功能没有受到干扰,我还是会看到一个崩溃弹出窗口,其中包含以下详细信息。同样的东西在我们的开发和测试机器中工作,没有崩溃弹出窗口

为了暂时解决这个问题,我找到的唯一办法是如下设置注册表项

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);我没找到那样的东西