2008-08-19 40 views
6

我們正在開發的產品允許用戶輕鬆地將其設置爲在計算機啓動時自動運行。這很有幫助,因爲該產品是我們大多數用戶的基本工作環境的一部分。
這個特性在不久之前就已經實現了,並且有一段時間一切都很順利,但是當我們在Vista上開始測試這個特性時,產品在啓動時開始表現得非常奇怪。具體來說,我們的產品使用了另一種產品(讓它稱爲X),它在需要其服務時啓動。實際的問題是,無論何時在登錄後立即啓動X,它都會崩潰或報告與磁盤訪問相關的嚴重錯誤(即使直接啓動X(而不是通過我們的產品)也會發生這種情況)。爲什麼我的自動運行應用程序在Vista上表現怪異?

發生這種情況時,我們通過在註冊表中的「運行」鍵註冊,或一個快捷方式放到它在「啓動」文件夾中的「開始菜單」內運行我們的產品,甚至當我們把在實際開始運行之前延遲約20秒。當我們將延遲改爲70秒時,一切都很好。

我們試圖通過在登錄後立即手動啓動我們的產品(通過雙擊放置在桌面上的快捷方式)來重現問題,但無濟於事。

現在,在登錄後立即啓動時,如何在登錄後一分鐘運行正常的應用程序報告此類硬錯誤?

回答

6

這是在Vista中稱爲「拳擊」的新功能的效果: Windows有幾種機制允許用戶/管理員設置應用程序,以在Windows啓動時自動運行。此功能主要用於以下目的之一: 1.作爲用戶基本工作環境一部分的程序,使用戶在啓動計算機時通常會執行的第一個操作是啓動它們。 2.各種背景「代理商」 - skype,messenger,winamp等

當啓動時註冊的程序過多(或過多)時,最終結果是用戶實際上無法做任何事情在登錄後的前幾秒/分鐘,這可能真的很煩人。 Vista中的「拳擊」功能:

簡而言之,Vista會強制所有通過Run鍵調用的程序在登錄後的前60秒以低優先級運行。這會影響I/O優先級(設置爲非常低)和CPU優​​先級。非常低優先級的I/O請求不通過文件緩存,而是直接進入磁盤。因此,它們比常規I/O慢得多。 裝箱期的長度由註冊表值設置: 「HKLM \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ Advanced \ DelayedApps \ Delay_Sec」。

如需更詳細的解釋見herehere

0

程序可能需要一些更多的信息放入其屬性。它需要「運行」,而不是僅僅運行。

也許這個應用程序應該作爲一種服務來開發,而不是一個要啓動的程序,或者當它確定了最佳的機會窗口時,你可以擁有啓動程序的服務。

相關問題