2012-02-05 38 views
0

可能重複:
How can a Windows service execute a GUI application?
Opening IE through WCF打開IE

我有Windows服務在啓動時建議立即進行刪除打開IE與某些URL,

這URL的目的是打開一個IE附加組件,所以我不認爲這個解決方案就像HttpWebRequest應該工作一樣。

我配置服務作爲「本地系統帳戶」,也是「允許與桌面交互」

,但不知道應該怎麼會從服務打開IE瀏覽器。

回答

3

好吧,長話短說 - 你不應該。我不說「不能」,但你真的不應該。 從Windows Vista開始,會話和桌面之間會有更好的分離,並且有很好的理由進行分離。

首先 - 基礎知識:在windows中可以有多個會話。在每個會話中,您可以擁有多個Windows工作站。在每個Windows Station中,您可以有多個桌面(並且用戶的桌面通常被命名爲「默認」)

默認情況下,服務使用的不是交互式的Windows工作站如果您使服務交互,這意味着您的服務將運行在Winsta0 (在Windows XP中 - 如果忽略快速用戶切換) 但是 - 從Windows Vista開始(甚至在使用終端服務場景之前),活動用戶不再運行在會話0。所以你確實打開Internet Explorer ...但在錯誤的會話。

你可以做什麼?有一些解決方法。你可以嘗試識別s您可能感興趣(當前登錄用戶的位置,可能是通過查找explorer.exe進程的會話),然後重新使用進程標記(使用OpenProcessToken)並複製它(使用DuplicateTokenEx),然後創建新進程使用該令牌(使用CreateProcessAsUser)並在Winsta0 \ Default中啓動新進程(它將在令牌的會話中啓動,該令牌有望成爲用戶會話 - 因此用戶將能夠看到它)。

希望有所幫助。

+0

我該如何獲得當前會話? – MoShe 2012-02-05 20:15:54

+0

你會在原始進程的會話中運行一些東西(你複製了他的令牌) – 2012-02-10 13:11:40