技术开发 频道

在Visual Studio 2010中实现灾难恢复

  为了支持重启管理器,微软提供了一套Restart Manassas API函数来完成这些工作。这些函数定义在<restartmanager.h>头文件中,如果你的应用程序想使用这套API,需要引用rstrtmgr.lib和rstrtmgr.dll。其中,我们常用的函数有:

  •RMStartSession
  创建一个新的重启任务。

  •RMGetList
  这个函数可供安装程序使用,它可以得到所有被影响的应用程序及其当前状态。

  •RMRegisterResources
  注册重启任务的资源,例如文件名,服务或者是RM_UNIQUE_PROCESS结构体。

  •RMRestart
  重新启动被RmShutdown关闭的应用程序或者服务,当然,这些应用程序或者服务都需要通过RegisterApplicationRestart事先进行注册。

  •RMShutDown
  关闭应用程序或者服务。

  •RMEndSession
  结束重启任务。

  添加对重启管理器的支持

  虽然Windows Vista系统本身提供了对重启管理器的支持,但是对于应用程序本身,也同样需要一些额外的工作,以完成对重启管理器的支持。

  对于新创建的MFC应用程序,我们可以简单地在“MFC应用程序向导”中设置是否需要支持重启管理器。


图2 MFC应用程序向导

  在“MFC应用程序向导”的高级特性选项卡中有关于重启管理器的选项。其中,如果仅仅选中“Support Restart Manager”选项,表示你的应用程序将仅仅支持重新启动。换句话说,你的应用程序可以在升级或者崩溃之后重新启动,但是无法自动打开未关闭的文档,无法对数据进行恢复。

  如果同时选中“Reopen previously open documents”选项,它表示你的应用程序可以在重启之后重新打开之前打开的文档,也就是自动恢复到当前的工作状态。

  如果选中了“Support application recover”选项,它表示你的应用程序在重新启动后,不仅可以重新打开之前打开的文档,还会尝试恢复自动保存的文档。它将弹出一个任务对话框(Unicode版本)或者消息框(非Unicode版本),询问用户是否需要恢复自动保持的文档。如果用户选择“Yes”,那么自动保持的文档将被打开作为当前文档。如果用户选择“No”,那么用户最后保存的文档将被打开作为当前文档,同时自动保存的文档将被删除。

  这里需要注意的是,只有文档视图类型的应用程序才支持“Reopen previously open documents”选项和“Support application recover”选项,对话框类型的应用程序只支持“Support Restart Manager”选项。

  对于Visual Studio 2010中新创建的MFC应用程序,可以在应用程序向导中进行设置,添加对重启管理器的支持。那么对于很多已有的MFC应用程序,如果同样想获得重启管理器的支持,应该怎么办呢?实际上,对于已有的MFC应用程序,要想获得重启管理器的支持很简单。在新版本的MFC中,CWinApp类增加了一个新的成员变量,用于控制应用程序对重启管理器的支持,我们只需要在应用程序的构造函数中,添加几行代码,按照我们的需求对其合理的初始化就可以了。

0