MBZ*_*MBZ 6 c# desktop-application
在我的应用程序中构建崩溃恢复的最佳方法(可能是标准解决方案)是什么,因此它可以在任何类型的崩溃时自动重启.
TNX.
Han*_*ant 10
通常最好不要这样做,没有什么可以不断开始的过程,并且用户无助地看着大屠杀再次立即崩溃.但我只能递给你子弹,瞄准你脚下的枪是由你决定的.你需要这样的代码:
static void Main(string[] args) {
AppDomain.CurrentDomain.UnhandledException += ReportAndRestart;
// etc..
}
static void ReportAndRestart(object sender, UnhandledExceptionEventArgs e) {
string info = e.ExceptionObject.ToString();
// Log or display info
//...
// Let the user know you're restarting
//...
// And restart:
System.Diagnostics.Process.Start(
System.Reflection.Assembly.GetEntryAssembly().Location,
string.Join(" ", Environment.GetCommandLineArgs()));
Environment.Exit(1);
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,我在命令行参数上使用了快捷方式.如果它们包含指向包含空格的文件的路径,则应引用它们.不要对你应该放在省略号中的代码进行快捷方式.
你有几个选择.
第一个(也是最好的)是添加某种类型的全局错误处理,它将捕获任何未捕获的异常并正确处理它们.沿着这些方向,您应该开始向代码库添加适当的特定异常处理.请记住,无论如何,堆栈溢出和某些安全性和内存异常都会超过任何全局处理.
第二种选择是建立一个监控服务,只测试当前应用程序是否仍在运行.如果不是,则强制终止现有应用程序并重新启动新实例.
第三种选择是将您的应用程序分成两个应用程序.外部"容器"类型应用程序,只执行其他进程.容器应用程序将没有UI,但会启动主进程并观看它(很像上面的选项2).我见过这个用于各种"模块化"应用程序.
关键是,唯一真正的方法是拥有2个应用程序:一个用于监控,另一个用于实际执行用户界面和其他所有操作.
| 归档时间: |
|
| 查看次数: |
5333 次 |
| 最近记录: |