`
winzenghua
  • 浏览: 1357743 次
  • 性别: Icon_minigender_2
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

Visual StudioC++新特性--MFC王者归来(3)MFC新功能-基于windows7的重启管理灾难恢复

阅读更多

为了提高用户体验,让用户用起来感觉比较爽,Microsoft在Windows Vista系统中首先引入了重启管理器(Restart Manager)。

就类似office2007的自动保存功能,一旦出了故障,可以恢复自己的工作成果,不至于让自己工作成果因为故障而丢失。

它可以帮助应用程序维护其当前运行状态,当软件更新后需要重新启动,或者是遇到非常严重的问题崩溃后,可以重新启动软件并且恢复到软件的当前工作状态。更重要的是,它还可以恢复自动保存的软件数据状态,尽量保证用户数据的安全。有了重启管理器,软件就可以很快地从灾难中恢复过来,实现快速“灾后重建”。

微软平台产品及服务部门总裁Jim Allchin向eweek透露,如果一个应用程序或操作系统本身需要更新,安装器就会唤出Restart Manager。Restart Manager负责查看是否能清除操作系统的相关部分,以更新它。如果可以的话,系统就不必重新启动了。
在即将王者归来的Visual c++2010在MFC增加了Restart Manager支持。
重启管理器主要应用在下面两个方面:
◆软件更新
很多时候,软件或者操作系统升级后,需要重新启动才可以生效。在这种情况下,我们就可以使用重启管理器自动关闭真正运行的软件,然后进行更新,更新完成后自动重新启动软件,并且恢复到软件当前的工作状态。这将使得软件的更新更加流畅和智能。
◆软件灾难恢复
当软件遇到严重错误,进程崩溃的时候,可以使用重启管理器重新启动软件,恢复软件自动保持的数据,让软件可以快速地从灾难中恢复过来。
为了支持重启管理器,微软提供了一套Restart Manassas API函数来完成这些工作。这些函数定义在头文件中,如果你的应用程序想使用这套API,需要引用rstrtmgr.lib和rstrtmgr.dll。其中,我们常用的函数有:
◆RMStartSession
创建一个新的重启任务。
◆RMGetList
这个函数可供安装程序使用,它可以得到所有被影响的应用程序及其当前状态。
◆RMRegisterResources
注册重启任务的资源,例如文件名,服务或者是RM_UNIQUE_PROCESS结构体。
◆RMRestart
重新启动被RmShutdown关闭的应用程序或者服务,当然,这些应用程序或者服务都需要通过RegisterApplicationRestart事先进行注册。
◆RMShutDown
关闭应用程序或者服务。
◆RMEndSession
结束重启任务。
添加对重启管理器的支持
虽然Windows Vista或者windows 7系统本身提供了对重启管理器的支持,但是对于应用程序本身,也同样需要一些额外的工作,以完成对重启管理器的支持。

在“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类增加了一个新的成员变量,用于控制应用程序对重启管理器的支持,我们只需要在应用程序的构造函数中,添加几行代码,按照我们的需求对其合理的初始化就可以了。
跟我们在上面所介绍的“MFC应用程序向导”中的选项相一致,如果你选择的是“Support Restart Manager”,你可以在初始化函数中添加如下的代码:
m_dwRestartManagerSupportFlags = 
AFX_RESTART_MANAGER_SUPPORT_RESTART;

如果你想选择“Reopen previously open documents”,可以添加如下的代码:
m_dwRestartManagerSupportFlags = 
AFX_RESTART_MANAGER_SUPPORT_RESTART_ASPECTS;

如果你想选择“Support application recover”,可以添加下面这行代码:
m_dwRestartManagerSupportFlags =
AFX_RESTART_MANAGER_SUPPORT_ALL_ASPECTS;

 

例如,我只想支持重启管理器,让软件可以在更新后重新启动,则可以这样进行应用程序的初始化:
CRestartManagerDemoApp::CRestartManagerDemoApp()
{
m_bHiColorIcons = TRUE;
// support Restart Manager
m_dwRestartManagerSupportFlags = AFX_RESTART_MANAGER_SUPPORT_RESTART;
// TODO: add construction code here,
// Place all significant initialization in InitInstance
}

首先,启动Visual Studio 2010 CTP,创建一个单文档的应用程序CSDNRestartManager。按照我们前面的介绍,在“MFC应用程序向导”中选择“Support Restart Manager”和“Reopen previously open documents”选项,以支持应用程序的重新启动和文档的重新打开。并选择editview,文档管理器。
  为了验证重启管理器重新打开文档的功能,我们在文档中添加一些数据,这些数据将在程序重新启动后自动被加载进来。

首先文档的序列化,使得我们的文档数据能够保存和重新加载,不懂文档序列化的可以去google!

即首先用MFC实现一个记事本功能,这个网络上泛滥,本专家在此就不多费口舌了,

使用Restart Manassas API测试重启管理器
  接下来,我们可以编写一个测试程序,使用Restart Manassas API模拟软件的更新后重启,以验证其重启管理器是否正常工作。
  用Visual Studio 2010 RC创建一个控制台应用程序Test,然后将其实现如下

我们首先运行CSDNRestartManager,在视图中用键盘输入向文档中添加数据,然后保持文档为test.txt。

现在,我们就可以运行Test重启这个应用程序了。运行Test后,我们会看到CSDNRestartManager会被关闭然后重新打开。同时,我们之前打开的文档test.txt也被重新加载,整个应用程序很快恢复到了我们之前的工作状态。


本文作者专著《Visual C++2010开发权威指南》即将推出,敬请关注,Visual C++2010最近技术,Windows7开发最新技术!

分享到:
评论

相关推荐

    用Visual C++实现的扫雷程序

    首先,Visual C++是微软公司开发的一款强大的集成开发环境,它支持C++语言,并提供了丰富的MFC(Microsoft Foundation Classes)库,使得开发者可以方便地创建Windows应用程序。在实现扫雷程序时,我们主要会用到MFC...

    VC++画圆程序源代码

    这个程序利用Microsoft Visual C++(VC++)环境,通过Windows API(应用程序接口)来实现画圆的功能。Windows API是微软提供的一组函数,允许开发者创建能在Windows操作系统上运行的应用程序。 首先,我们要了解C++...

    Visual C++源代码 30 如何为应用程序添加背景音乐

    Visual C++源代码 30 如何为应用程序添加背景音乐Visual C++源代码 30 如何为应用程序添加背景音乐Visual C++源代码 30 如何为应用程序添加背景音乐Visual C++源代码 30 如何为应用程序添加背景音乐Visual C++源代码...

    Visual Studio c++

    2. **MFC库**:Microsoft Foundation Classes (MFC) 是一套基于C++的类库,它封装了Windows API,使开发者能更方便地创建Windows应用程序。 3. **Visual C++编译器**:支持C++标准,包括模板、异常处理、RTTI(运行...

    Visual C++ 车牌识别程序

    《Visual C++ 车牌识别程序:技术详解与应用实践》 在计算机视觉领域,车牌识别是一项重要的技术,广泛应用于智能交通系统、停车场管理、安防监控等多个领域。本篇文章将详细探讨使用Visual C++实现车牌识别程序的...

    [Visual.C.开发实战1200例.第1卷].刘锐宁

    根据提供的文件信息,“[Visual C++ 开发实战1200例 第1卷]”这本书由刘锐宁编写,主要围绕Visual C++编程语言展开了一系列的实际应用案例。书中的1200个示例覆盖了从基础知识到高级技巧的广泛内容,旨在帮助读者...

    C++ 即时聊天工具

    开发者可能使用了`<sys/socket.h>`或`<winsock2.h>`这样的库来创建和管理套接字。 其次,为了实现即时聊天功能,多线程技术必不可少。C++标准库提供`<thread>`头文件支持多线程编程。一条线程用于接收来自网络的...

    P2P 聊天室 c++ 版本 附详细文档

    本项目是基于C++实现的一个P2P聊天室,旨在提供一个高效、实时的交流平台,通过UDP打洞技术实现穿透NAT,让网络中的用户能够进行直接通信。 首先,我们来探讨P2P聊天室的核心概念。P2P聊天室与传统的C/S架构不同,...

    visual studio 服务程序模板(c++)

    "Visual Studio 服务程序模板(c++)"是Visual Studio为开发者提供的一个便利资源,允许用户轻松创建和管理Windows服务应用程序。这个模板简化了服务程序的开发过程,使得即使是初学者也能高效地构建服务。 Windows...

    零基础visual studioC#2005

    3. **Windows Forms编程**:Visual Studio 2005中的Windows Forms工具箱让你可以拖放控件创建用户界面,学习如何布局控件、处理事件、响应用户交互,是开发桌面应用程序的基础。 4. **调试与异常处理**:学会使用...

    用C#做的文件存储管理基于Visual Studio平台

    本文将深入探讨如何使用C#在Visual Studio平台上构建一个文件存储管理系统,它能够有效地管理和操作文件,包括显示文件的基本信息以及执行常见的文件操作。 首先,我们需要理解C#中的文件系统类库,这是实现文件...

    c#简单作业visual studio2008

    Visual Studio 2008是微软提供的一款强大的开发环境,它支持C#编程,提供了丰富的代码编辑、调试和项目管理工具,对于初学者来说是非常友好的平台。 在C#的学习过程中,基础语法是入门的关键。这包括变量声明、数据...

    vcproj2make:将 Visual Studio 解决方案转换为 makefile

    Visual Studio 项目到 Makefile 该项目旨在成为一种将项目构建信息从 Visual Studio 项目文件格式自动转录为 makefile 的方法。 一般架构 大体架构是先将所有VS文件解析成反映VS项目文件打包信息的数据结构。 然后...

    Project1_C语言_visualstudio_

    在本项目"Project1_C语言_visualstudio_"中,我们将探讨如何使用Microsoft的Visual Studio IDE来编写和运行C语言程序。Visual Studio是一个强大的开发环境,支持多种编程语言,包括C语言,它为程序员提供了丰富的...

    ArcGIS 10.1 SOE 图形增删改查

    这四个基本操作是GIS应用中的核心功能,对于数据管理至关重要。 首先,我们来了解什么是SOEs。ESRI的ArcGIS Server提供了一个平台,开发者可以通过SOEs来扩展其功能,创建具有特定逻辑和行为的服务。SOEs可以看作是...

    c语言三子棋源码(visual studio 2019).zip

    【标题】"C语言三子棋源码(Visual Studio 2019)"指的是一个使用C语言编写的三子棋游戏的源代码项目,该源代码可以在Microsoft的Visual Studio 2019集成开发环境中进行编译和运行。三子棋,又称为井字游戏或Noughts ...

    c语言项目源码大全

    3. **循环**:通过for或while循环遍历所有可能的运算组合。 4. **条件语句**:if-else结构用于判断运算结果是否等于24。 5. **函数**:设计一个函数,接受四个参数,返回是否能组合出24的结果。 6. **运算符...

    工控老马 C# 通过网络和三菱的PLC通信程序源代码

    3. **异常处理和错误恢复机制**:在实际的工业环境中,网络通信可能会遇到各种问题,如网络中断、超时或数据错误。源代码应包含适当的错误检测和恢复机制,确保通信的稳定性和可靠性。 4. **线程管理**:为了保持...

    c#编写时钟

    在编程领域,C#是一种广泛使用的面向对象的编程语言,由微软公司开发并推广,主要用于构建Windows应用程序、Web应用以及游戏等。在这个“C#编写时钟”的项目中,我们将会探讨如何使用C#来创建一个实时显示时间的时钟...

Global site tag (gtag.js) - Google Analytics