我正在爲運行Windows XP的某些信息亭構建一個相當專業的屏幕保護程序。用戶往往會離開亭沒有瀏覽器返回到首頁,讓屏幕保護程序執行以下操作:通過標準屏幕保護機制 Windows XP屏幕保護程序 - 使用屏幕保護程序啓動過程死亡
- 推出通知用戶一直沒有最近的活動,並瀏覽器將在X秒內關閉。
- 如果X秒內通過,而無需用戶活動,屏幕保護程序殺死所有當前瀏覽器實例(通過Process.GetProcessesByName),並開始指向配置的網站(通過的Process.Start)瀏覽器的新實例。
- 屏幕然後「空白」,直到用戶移動鼠標或按下一個鍵 - 此時屏幕保護程序退出。
當這個運行在Windows Vista或2008,按預期工作的一切。
然而,在Windows XP(這是亭正在運行的),當保護程序退出屏幕,瀏覽器進程被終止。如果在屏幕保護程序存在之前添加Thread.Sleep,則可以查看瀏覽器並與其進行交互,直到屏幕保護程序退出。
使事情更混亂,當我通過單擊設置區域中的「預覽」按鈕,運行屏幕保護程序的Windows XP不會出現此行爲 - 也就是說,它的行爲如預期。在這種情況下運行完全相同的代碼。
我在.NET 2.0框架下測試了這個,後來安裝了.NET 2.0 SP1。在Windows 2008工作站上,我有3.5 SP1。
有相對於依賴於啓動的進程,這些版本的.NET之間存在一些差異?是否有一些標誌可以確保啓動的瀏覽器進程不會「附加」到屏幕保護程序?
我不得不做你的第二個建議(IPC)。我最終使用了新的(.NET 3.5)NamedPipeServerStream和NamedPipeClientStream類來實現它,它運行良好。 我首先嚐試了第一個建議,但是從測試中看來,Windows XP似乎遵循一個「帶和吊帶」規則:它似乎既殺死進程樹又運行在不同的桌面上,最後IPC方法是更容易實施。 – user127665 2009-06-26 15:21:42