Hos*_*Aly 14
另一个解决方案(基于此示例)是创建一个控制应用程序的启动器:
class LauncherProgram
{
static int count = 3;
static void Main()
{
Launch();
Thread.Sleep(Timeout.Infinite);
}
static void Launch()
{
Process process = new Process();
process.StartInfo.FileName = "MyApp.exe";
process.EnableRaisingEvents = true;
process.Exited += LaunchIfCrashed;
}
static void LaunchIfCrashed(object o, EventArgs e)
{
Process process = (Process) o;
if (process.ExitCode != 0)
{
if (count-- > 0) // restart at max count times
Launch();
else
Environment.Exit(process.ExitCode);
}
else
{
Environment.Exit(0);
}
}
Run Code Online (Sandbox Code Playgroud)
如果这是一个Windows窗体应用程序:
现在无论这是Windows窗体应用程序还是控制台应用程序:
注册Application.ThreadException事件,例如在C#中:
Application.ThreadException + = new Threading.ThreadExceptionHandler(CatchFatalException);
此时,您的应用已经进入黑洞.接下来会发生什么取决于这是否是Windows窗体应用程序: