我们正在开发的产品允许用户轻松将其设置为在计算机启动时自动运行.这很有用,因为该产品是大多数用户基本工作环境的一部分.
这个功能不久前实现了一段时间,一切都很好,但是当我们开始在Vista上测试这个功能时,产品在启动时开始表现得非常奇怪.具体来说,我们的产品使用另一种产品(称之为X),只要它需要服务就会启动.实际问题是,只要在登录后立即启动X,它就会崩溃或报告与磁盘访问相关的严重错误(即使直接启动X而不是通过我们的产品,也会发生这种情况).
每当我们通过在注册表中的"运行"键中注册它来运行我们的产品或在" 开始菜单 " 内的" 启动 "文件夹中放置它的快捷方式时就会发生这种情况,即使我们实际延迟了大约20秒开始跑步 当我们将延迟改为70秒时,一切都很顺利.
我们尝试通过在登录后立即手动启动我们的产品(通过双击桌面上的快捷方式)来重现问题,但无济于事.
现在,登录后一分钟正常运行的应用程序如何在登录后立即启动时报告此类硬错误?
这就是Vista中一项名为"Boxing"的新功能的效果:Windows有几种机制允许用户/管理员设置应用程序,以便在Windows启动时自动运行.此功能主要用于以下目的之一:1.作为用户基本工作环境一部分的程序,这样用户在启动计算机时通常会采取的第一个操作是启动它们.2.各种背景"代理人" - skype,messenger,winamp等.
当注册太多(或太重)程序在启动时运行时,最终结果是用户在登录后的前几秒/几分钟内实际上无法执行任何操作,这可能非常烦人.来自Vista的"拳击"功能:
简而言之,Vista强制所有通过Run键调用的程序在登录后的前60秒内以低优先级运行.这会影响I/O优先级(设置为Very Low)和CPU优先级.非常低优先级的I/O请求不会通过文件缓存,而是直接进入磁盘.因此,它们比常规I/O慢得多.装箱期的长度由注册表值设置:"HKLM\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\DelayedApps\Delay_Sec".
有关更详细的说明,请参见此处和此处