我正在.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拨号会弹出并阻止应用程序继续执行,直到我单击“关闭”为止。
我知道我可以将禁用的msdn.microsoft.com/en-us/library/bb513638%28v=vs.85%29.aspx值设置为true -msdn.microsoft.com/en-us/library/bb513638%28v=vs.85%29.aspx。
,但是有什么方法可以在代码中这样做吗?
编辑:
kmp已经发布了一个很好的答案,但我仍然在寻找如何在本机应用程序中实现同样的目标。
发布于 2012-08-24 05:53:29
如果您可以编辑崩溃过程的代码,那么您可以做的是添加代码,如下面所示(本文将讨论它:禁用程序崩溃对话框) -有关此Windows函数的信息,请参见SetErrorMode函数。
如果您不能更改崩溃应用程序的代码,那么它会更复杂,并且您必须在运行时将代码注入其中(这取决于您正在启动的进程是什么编写的--例如,如果它是.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);发布于 2012-10-16 13:46:37
根据本文件,应该可以将SetErrorMode值继承到子进程。因此,任何类型的启动程序(或您的主要应用程序),如果将SetErrorMode设置为所需的值,然后执行您的本地应用程序,应该可以工作。实际上,这种继承在默认情况下是存在的。若要关闭它,请参阅标志这里。
https://stackoverflow.com/questions/12102982
复制相似问题