Windows 7 应用程序崩溃恢复
2011-01-04 11:49
274 查看
从Vista 到Windows 7 这两款操作系统都带有应用程序恢复和重启(ARR)功能,利用这个特性可以在应用程序处于无响应甚至崩溃状态时,保存当前正在处理的数据,并将应用程序以及之前的数据恢复。本篇我们将利用Windows API Code Pack 来实现这一功能。
首先,我们来创建一个简单的WPF程序。在应用程序加载时需要注册(Register)ARR,当应用程序关闭时也需要将ARR注销。
注册ARR
注销ARR
在项目中加入Microsoft.WindowsAPICodePack.dll,并添加using Microsoft.WindowsAPICodePack.ApplicationServices; 命名空间。接下来我们开始编写RegisterForRestartRecovery 和UnRegisterRestartRecovery 方法。
在RegisterForRestartRecovery 方法中要分别创建Restart 和Recovery 设置(Settings)。在RestartSettings 中可以设置命令行(“restart”),以及Restart 限制条件。在本例中如果应用程序崩溃是因为PC 重启或安装系统补丁则不会发生Restart 功能。最后要通过ApplicationRestartRecoveryManager 类将Restart 和Recovery 设置分别注册。
注销方式使用UnregisterApplicationRestar和 UnregisterApplicationRecovery 两种方法即可。
在应用程序恢复过程中还需要编写一个恢复过程,即RegisterForRestartRecovery 方法提到的PerformRecovery。首先可以通过ApplicationRecoveryInProgress 方法判断恢复过程是否在进行。如果恢复过程被用户取消了,则可以将应用程序进程杀掉,并通过ApplicationRecoveryFinished 方法设置恢复过程是否完成。
至此,应用程序的恢复就完成了,大家可以下载代码进行测试。另,当程序启动后要等待60秒再点击“Application Crash” 按键。
首先,我们来创建一个简单的WPF程序。在应用程序加载时需要注册(Register)ARR,当应用程序关闭时也需要将ARR注销。
<Window x:Class="AppRestartRecovery.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="350" Width="525"> <Grid> <Button x:Name="crashBtn" Content="Application Crash" Margin="169,104,172,168" Click="crashBtn_Click"/> <Button x:Name="closeBtn" Content="Close Application" Margin="169,189,172,83" Click="closeBtn_Click"/> </Grid> </Window>
注册ARR
public MainWindow() { InitializeComponent(); RegisterForRestartRecovery(); ... ... }
注销ARR
private void closeBtn_Click(object sender, RoutedEventArgs e) { UnRegisterRestartRecovery(); App.Current.Shutdown(); }
在项目中加入Microsoft.WindowsAPICodePack.dll,并添加using Microsoft.WindowsAPICodePack.ApplicationServices; 命名空间。接下来我们开始编写RegisterForRestartRecovery 和UnRegisterRestartRecovery 方法。
在RegisterForRestartRecovery 方法中要分别创建Restart 和Recovery 设置(Settings)。在RestartSettings 中可以设置命令行(“restart”),以及Restart 限制条件。在本例中如果应用程序崩溃是因为PC 重启或安装系统补丁则不会发生Restart 功能。最后要通过ApplicationRestartRecoveryManager 类将Restart 和Recovery 设置分别注册。
private void RegisterForRestartRecovery() { RestartSettings restartSettings = new RestartSettings("restart", RestartRestrictions.NotOnReboot | RestartRestrictions.NotOnPatch); ApplicationRestartRecoveryManager.RegisterForApplicationRestart(restartSettings); RecoveryData data = new RecoveryData(new RecoveryCallback(PerformRecovery), null); RecoverySettings recoverySettings = new RecoverySettings(data, 0); ApplicationRestartRecoveryManager.RegisterForApplicationRecovery(recoverySettings); }
注销方式使用UnregisterApplicationRestar和 UnregisterApplicationRecovery 两种方法即可。
private void UnRegisterRestartRecovery() { ApplicationRestartRecoveryManager.UnregisterApplicationRestart(); ApplicationRestartRecoveryManager.UnregisterApplicationRecovery(); }
在应用程序恢复过程中还需要编写一个恢复过程,即RegisterForRestartRecovery 方法提到的PerformRecovery。首先可以通过ApplicationRecoveryInProgress 方法判断恢复过程是否在进行。如果恢复过程被用户取消了,则可以将应用程序进程杀掉,并通过ApplicationRecoveryFinished 方法设置恢复过程是否完成。
private int PerformRecovery(object state) { bool isCanceled = ApplicationRestartRecoveryManager.ApplicationRecoveryInProgress(); if (isCanceled) { ApplicationRestartRecoveryManager.ApplicationRecoveryFinished(false); } //recovery your work here ... ApplicationRestartRecoveryManager.ApplicationRecoveryFinished(true); return 0; }
至此,应用程序的恢复就完成了,大家可以下载代码进行测试。另,当程序启动后要等待60秒再点击“Application Crash” 按键。
源码下载
AppRestartRecovery.zip相关文章推荐
- Windows 7 应用程序崩溃恢复
- oradim用法windows系统崩溃时,恢复DB)
- 记一次Windows Embedded CE应用程序崩溃的摸索
- Windows系统崩溃后快速恢复Oracle数据库的妙招
- windows下如何分析应用程序崩溃
- windows系统如何设置应用程序崩溃自动内存转储
- windows 2000 advance server +oracle 9i系统崩溃后的数据恢复案例
- windows 实例崩溃恢复
- 有那些解决Windows应用程序崩溃或者终止的免费工具?
- 让Windows下的应用程序在崩溃的时候写dump文件的代码
- Windows Phone & Windows App应用程序崩溃crash信息抓取方法
- 使用ProcDump工具解决Windows应用程序崩溃
- 解决Windows应用程序崩溃或者终止的免费工具.
- windows 应用程序崩溃时的内存转储及dump文件的分析
- windows 应用程序崩溃时的内存转储及dump文件的分析
- Windows 8 Store 应用程序中HMAC_SHA1加密的方法
- 在添加windows应用程序时出现“automation服务器不能创建对象 ”的错误
- windows组件中没有“应用程序服务器”这一项
- Python 批量分析windows程序崩溃捕获的dump文件
- 操作系统崩溃后,恢复ORACLE 9数据库