为什么我的自动运行的应用程序在Vista上表现怪异?
我们正在开发的产品使用户可以轻松地将其设置为在启动计算机时自动运行。这很有帮助,因为该产品是我们大多数用户基本工作环境的一部分。
不久前实现了该功能,一段时间以来一切都还不错,但是当我们开始在Vista上测试此功能时,该产品在启动时就开始显得很奇怪。具体来说,我们的产品会利用需要其服务时启动的另一种产品(简称为X)。实际的问题是,登录后立即启动X时,它会崩溃或者报告与磁盘访问有关的严重错误(即使直接通过X而不是通过我们的产品启动X,也会发生这种情况)。
每当我们通过在注册表中的"运行"键中注册产品或者将其快捷方式放置在"开始菜单"内的"启动"文件夹中来运行产品时,即使我们实际延迟了约20秒,也会发生这种情况开始运行。当我们将延迟更改为70秒时,一切都很好。
我们试图通过在登录后立即手动启动产品(通过双击桌面上的快捷方式)来手动启动产品,从而重现该问题,但无济于事。
现在,登录后一分钟正常运行的应用程序怎么可能在登录后立即启动时报告此类硬错误?
解决方案
回答
这是Vista中一项称为"装箱"的新功能的作用:
Windows具有多种机制,允许用户/管理员将应用程序设置为在Windows启动时自动运行。此功能主要用于以下目的之一:
1.程序是用户基本工作环境的一部分,因此,用户在启动计算机时通常会首先执行的动作是启动程序。
2.各种背景"代理" Skype,Messenger,Winamp等。
如果注册的程序太多(或者太重)而无法在启动时运行,则最终结果是用户在登录后的最初几秒钟/分钟内实际上无法执行任何操作,这确实很烦人。 Vista的"拳击"功能包括:
简要地说,Vista会强制所有通过运行键调用的程序在登录后的头60秒内以低优先级运行。这会影响I / O优先级(设置为"非常低")和CPU优先级。优先级非常低的I / O请求不会通过文件缓存,而是直接进入磁盘。因此,它们比常规I / O慢得多。
装箱期的长度由注册表值设置:
" HKLM \软件\ Microsoft \ Windows \ CurrentVersion \ Explorer \ Advanced \ DelayedApps \ Delay_Sec"。
有关更详细的说明,请参见此处和此处
回答
该程序可能需要在其属性中添加更多信息。它需要"运行方式",而不仅仅是运行。
也许应该将此应用程序开发为服务,而不是作为要启动的程序来开发,或者我们可以在确定最佳机会窗口时使用可以启动该程序的服务。