我们正在开发的产品允许用户轻松地将其设置为在计算机启动时自动运行。这很有帮助,因为该产品是我们大多数用户基本工作环境的一部分。
这个功能是不久前实现的,有一段时间一切都很好,但是当我们开始在 Vista 上测试这个功能时,产品在启动时开始表现得很奇怪。具体来说,我们的产品利用了另一个产品(我们称之为 X),每当需要服务时就会启动该产品。实际问题是,每当 X 在登录后立即启动时,它就会崩溃或报告与磁盘访问相关的严重错误(即使直接启动 X,而不是通过我们的产品,也会发生这种情况)。

每当我们通过在注册表中的“运行”键中注册产品或将其快捷方式放置在“启动“文件夹内”开始菜单”,即使我们在实际开始运行之前延迟了大约 20 秒。当我们将延迟更改为 70 秒时,一切都很好。

我们尝试通过登录后立即手动启动我们的产品(通过双击桌面上的快捷方式)来重现该问题,但无济于事。

现在,登录后一分钟正常运行的应用程序在登录后立即启动时怎么可能报告这样的硬错误?

有帮助吗?

解决方案

这是Vista中一个名为“Boxing”的新功能的效果:Windows 有多种机制允许用户/管理员将应用程序设置为在 Windows 启动时自动运行。此功能主要用于以下目的之一:1.程序是用户基本工作环境的一部分,因此用户在启动计算机时通常采取的第一个操作就是启动它们。2.各种后台“代理”——Skype、Messenger、Winamp 等。

当太多(或太重)的程序注册为在启动时运行时,最终结果是用户在登录后的前几秒/分钟内实际上无法执行任何操作,这真的很烦人。Vista 的“拳击”功能登场:

简而言之,Vista 强制所有通过运行键调用的程序在登录后的前 60 秒内以低优先级运行。这会影响双方 I/O 优先级(设置为“非常低”)和 CPU 优先级. 。非常低优先级的 I/O 请求不经过文件缓存,而是直接进入磁盘。因此,它们比常规 I/O 慢得多。装箱周期的长度由注册表值设置:“HKLM\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\DelayedApps\Delay_Sec”。

更详细的解释请参见 这里这里

其他提示

该程序可能需要在其属性中放入更多信息。它需要“运行为”,而不仅仅是运行。

也许这个应用程序应该开发为服务,而不是要启动的程序,或者您可以拥有在确定最佳机会窗口时启动程序的服务。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top