博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Windows 7 应用程序崩溃恢复
阅读量:7055 次
发布时间:2019-06-28

本文共 2403 字,大约阅读时间需要 8 分钟。

 从Vista 到Windows 7 这两款操作系统都带有应用程序恢复和重启(ARR)功能,利用这个特性可以在应用程序处于无响应甚至崩溃状态时,保存当前正在处理的数据,并将应用程序以及之前的数据恢复。本篇我们将利用Windows API Code Pack 来实现这一功能。

     首先,我们来创建一个简单的WPF程序。在应用程序加载时需要注册(Register)ARR,当应用程序关闭时也需要将ARR注销。

注册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” 按键。

源码下载

本文转自Gnie博客园博客,原文链接:http://www.cnblogs.com/gnielee/archive/2011/01/04/windows7-application-restart-recovery.html,如需转载请自行联系原作者
你可能感兴趣的文章
Isilon整合Hadoop
查看>>
我的友情链接
查看>>
.NET反编译的九大金刚
查看>>
开源项目:Android-Universal-Image-Loader总结
查看>>
CentOS6.5 ping: unknown host 解决方
查看>>
C语言拷贝文件夹(包含文件属性信息)
查看>>
keepalive配置
查看>>
使用Ansible部署LAMP环境
查看>>
mac下 连接windows远程桌面
查看>>
如何在LoadRunner中使用winsocket协议
查看>>
部署DNS服务器之主要区域
查看>>
Android防反编译
查看>>
数字医学影像工作站相关资料汇总
查看>>
20051008网络工程师必懂的专业术语
查看>>
2012年我的十大工程7——阅读工程
查看>>
windows调整网卡访问顺序
查看>>
我的php学习笔记(42) PHP通过mail()或Socket发从邮件
查看>>
Mysql-主从精简配置
查看>>
ROM 、RAM和FLASH 的区别
查看>>
深入挖掘vsftpd服务
查看>>