我的 c# 应用程序Process.start()
用于在内部调用另一个 exe,然后调用process.waitforexit()
. 子 exe 完全执行后,我收到一个带有以下消息的弹出窗口
MNM_Interface 已停止工作
问题导致程序停止正常工作。如果有可用的解决方案,Windows 将关闭该程序并通知您。
我的日志显示我的父 exe 或子 exe 中没有异常。但是,只有在子 exe 中的代码完全执行之后才会出现错误弹出窗口。Eventviewer 显示异常代码:0xc0000005
。
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
我尝试在父 exe 和子 exe 中使用以下代码,但无法阻止此弹出窗口的出现。
AppDomain currentDomain = AppDomain.CurrentDomain;
currentDomain.UnhandledException += new
UnhandledExceptionEventHandler(DomainExceptionHandler);
Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
好吧,我在检查各种来源后得到的解决方案是在注册表项下方设置,并且效果很好。
HKEY_CURRENT_USER\Software\Microsoft\Windows\Windows 错误报告 DontShowUI =1
但是我不知道如何以编程方式防止此错误出现在应用程序中。有可能吗?
我附上了用于调用子 exe 的代码。
try
{
if (dllPath.EndsWith(Path.DirectorySeparatorChar.ToString()))
{
dllPath = dllPath.Remove(dllPath.Length - 1, 1);
}
System.Diagnostics.Process pr = new System.Diagnostics.Process();
pr.StartInfo.UseShellExecute = true;
pr.StartInfo.WorkingDirectory = Path.GetDirectoryName(strExe);
pr.StartInfo.FileName = Path.GetFileName(strExe);
pr.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
pr.StartInfo.Arguments =
" " + strAct + " "
+ "\"" + dllPath + "\" "
+ "\"" + strProject + "\" "
+ "\"" + strUser + "\" "
+ "\"" + strPassword + "\" "
+ "\"" + strDb + "\" "
+ "\"" + strXml + "\" "
+ strModule;
pr.Start();
MessageBox.Show("Before process execution");
pr.WaitForExit();
MessageBox.Show("After process execution");
}
catch (System.Exception ex)
{
MessageBox.Show(ex.StackTrace);
}
更多信息:错误模块名称:more.dll。如果我尝试使用 ildasm.exe 打开此 dll,我将得不到有效的 CLR 标头并且无法反汇编。所以我想我应该专注于如何处理由基于 CLR 的 C# 应用程序的外部 dll 引发的非托管代码异常。