Ответ 1
Если вы можете отредактировать код процесса сбоя, то то, что вы можете сделать, это добавить код, как показано ниже (в этой статье говорится об этом: Отключение диалоговое окно сбоя программы) - см. функцию SetErrorMode для информации MSDN об этой функции Windows API.
Если вы не можете изменить код приложения сбойного кода, он более сложный, и вам придется вводить код в него во время выполнения (насколько сложный процесс зависит от того, на каком этапе запускается процесс - если это процесс .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);