.net - 以编程方式禁用 Windows 错误报告 (AppCrash) 对话框

标签 .net

我正在 .NET 应用程序中执行一个进程。

                Process process = new Process(); 

....

                process.StartInfo.UseShellExecute = false;
                process.StartInfo.ErrorDialog = false;

                process.StartInfo.CreateNoWindow = true;
                process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
....
                process.Start();

问题是可执行文件有时会崩溃,这没关系,但弹出 AppCrash 对话框并阻止应用程序继续执行,直到我单击关闭。

我知道我可以将 HKLM\Software\Microsoft\Windows\Windows Error Reporting\ 值禁用设置为 true - msdn.microsoft.com/en-us/library/bb513638%28v=vs .85%29.aspx

但是有没有办法可以在代码中做到这一点?

编辑:

kmp 已经发布了一个很好的答案,但我仍在寻找如何使用 native 应用程序实现相同的目标。

最佳答案

如果您可以编辑崩溃进程的代码,那么您可以做的就是添加如下所示的代码(本文讨论它: Disabling the program crash dialog ) - 请参阅 SetErrorMode function有关此 Windows API 函数的 MSDN 信息。

如果您无法更改崩溃应用程序的代码,那么它会更加复杂,您必须在运行时将代码注入(inject)其中(复杂程度取决于您正在启动的进程是用什么编写的 - 如果它是 .NET 进程)例如,它比 native 应用程序更容易,因此您需要提供有关该过程的更多信息)。

[Flags]
internal enum ErrorModes : uint 
{
    SYSTEM_DEFAULT = 0x0,
    SEM_FAILCRITICALERRORS = 0x0001,
    SEM_NOALIGNMENTFAULTEXCEPT = 0x0004,
    SEM_NOGPFAULTERRORBOX = 0x0002,
    SEM_NOOPENFILEERRORBOX = 0x8000
}

internal static class NativeMethods
{
    [DllImport("kernel32.dll")]
    internal static extern ErrorModes SetErrorMode(ErrorModes mode);
}

// Ideally the first line of the main function...

NativeMethods.SetErrorMode(NativeMethods.SetErrorMode(0) | 
                           ErrorModes.SEM_NOGPFAULTERRORBOX | 
                           ErrorModes.SEM_FAILCRITICALERRORS | 
                           ErrorModes.SEM_NOOPENFILEERRORBOX);

关于.net - 以编程方式禁用 Windows 错误报告 (AppCrash) 对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12102982/

相关文章:

c# - 带有 sectionGroup 的自定义 ConfigurationSection 不起作用

.net - 每秒能够处理 40,000 条消息的系统的模式和技术

.net - 霍恩盖特怎么了?

c# - .NET 中的 Jaro-Winkler 距离算法

.net - 调试混淆的 .Net 程序集

c# - Quartz.NET 配置 - 不与数据库交互

c# 在数据库中存储用户设置

.net - .NET DateTime/TimeSpan 的刻度有多长?

c# - 任何 .NET '#region directive' 约定想法?

c# - 解析具有特殊字符的用户输入的良好做法?