浏览器之家


Vista开发新特性之有关重启管理器

自从我们开始使用计算机开始,重新启动就一直是我们用来“解决问题”的最后纺线,应用程序的更新更是如此,很多的问题都因为从新启动而变得简单。但是随着我们用的系统变得复杂,重新启动也变得越来越让人无法接受,你可以想象一下需要关闭20个窗口然后等待10分钟来启动所有的系统服务的感觉吗?而你所更新的可能仅仅是媒体播放器的一个小小的bug。

  Windows系统更新

  可能很多人都已经注意到了微软的Windows更新系统的新功能,它可以允许你延迟从新启动的操作,比如下图:

  
  Figure:我们可以仅仅点击关闭,而过后再重启

  
  Figure:Vista中的系统更新提示

  
  Figure:Vista中的系统自动更新正在下载和安装更新包

  这个功能让的我们的系统更新变得人性化,我们不用在受电脑的胁迫而去做我们不原意的重启了。

  重启管理器的主要功能

  但是,如果我们的更新更加智能化一下,可以自动的关闭我们正在运行的应用程序,并且在更新完成以后自动的启动它,那不是更好吗?重启管理器就是为了实现这样的功能而设计的。

  先看一下我们如果使用了重启管理器会有怎样的效果。假设你在下班之前没有完成一个文档,把写了一半的文件留在了屏幕上;那么如果半夜里Word 2007需要进行更新,那么Vista系统就会调用重启管理器来通知Word 2007做安全关闭动作,当支持重启管理器的Word 2007收到安全关闭的消息的时候,它会自动将未完成的文档保存并关闭自己的所有窗口;当更新完成以后,重启管理器就会通知Word 2007启动并会协助其恢复原来的状态;不仅仅包括未完成的文档,还包括窗口的位置,光标的位置等所有和用户使用环境相关的内容。

  同时,在我们设计更新程序的安装包的时候我们也可以调用重启管理器的API来向应用程序发出关闭和重启消息。

  
  Figure:使用了重启管理器API的安装包会给出友好的提示

  我们可以很明显的看到,重启管理器可以帮助我们提升用户在更新应用程序的过程中的体验,基本上用户的工作过程不会被更新程序打扰,而可以专注于自己正在处理的工作。

  如何实现重启管理器的功能

  Windows Vista系统已经内置了对重启管理器的支持,系统可以在安装更新包之前自动的向应用程序发出关闭消息,并在安装完成以后发出启动消息。我们的应用程序需要做的事情就是相应这些消息并作出争取的处理。

  1.注册支持重启管理器

  NativeMethods.RegisterApplicationRestart(
commandLineReturnValue, //用来唯一标识当前状态的主键
  0);

  [DllImport("kernel32.dll", CharSet = CharSet.Auto)]

  internal static extern uint RegisterApplicationRestart(string pszCommandline,int dwFlags);

  上面所列的是c#代码实现的RegisterApplicationRestart API的调用,RegisterApplicationRetart是用来注册当前应用程序的系统API,调用之后,系统就知道这个应用程序会支持重启管理器的功能;在注册的同时我们还可以传送一个参数commandLineRetureValue,这个参数在后面会被重启管理器作为命令行参数返回给应用程序。

  2.响应ENDSESSION_CLOSEAPP系统消息

  //private const int ENDSESSION_LOGOFF = 0x8;

评论

没安装畅言模块