我正在执行.NET应用程序中的Process.
Process process = new Process();
....
process.StartInfo.UseShellExecute = false;
process.StartInfo.ErrorDialog = false;
process.StartInfo.CreateNoWindow = true;
process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
....
process.Start();
Run Code Online (Sandbox Code Playgroud)
问题是可执行文件有时会崩溃,这是可以的,但AppCrash拨号弹出并阻止应用程序继续执行,直到我点击关闭.
我知道我可以将HKLM\Software\Microsoft\Windows\Windows Error Reporting\值Disabled 设置为true - msdn.microsoft.com/en-us/library/bb513638%28v=vs.85%29.aspx
但有没有办法可以在代码中执行此操作?
编辑:
kmp发布了一个很好的答案,但我仍然在寻找如何使用本机应用程序实现相同的目标.
kmp*_*kmp 20
如果你可以编辑崩溃过程的代码,那么你可以做的就是添加我在下面显示的代码(本文讨论它:禁用程序崩溃对话框) - 请参阅SetErrorMode函数以获取有关此Windows API函数的MSDN信息.
如果你无法改变崩溃应用程序的代码,它就会变得更复杂,你必须在运行时将代码注入其中(这有多复杂取决于你正在启动的进程是什么 - 如果它是一个.NET进程,它会更容易例如,比本机应用程序,您需要提供有关该过程的更多信息).
[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);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5589 次 |
| 最近记录: |