0

Vista推出了一個新的安全防止會話0訪問像視頻卡這樣的硬件,並且用戶不再登錄到會話0.我知道這意味着我無法向用戶顯示GUI,但是,也意味着我不能顯示一個?現在我的代碼被設置的方式,它只是使命令行更多的工作,但是,如果我可以使用我現有的代碼,並且只是以編程方式管理GUI,它將需要更少的代碼。Session 0 Isolation

這可能嗎?

從MSDN文章這樣說:

•服務嘗試創建一個用戶界面(UI),如一個對話框,在會話0。因爲用戶沒有在會話0運行,他或她永遠不會看到用戶界面,因此無法提供該服務正在尋找的輸入。該服務似乎停止運行,因爲它正在等待不會發生的用戶響應。

這讓我覺得它可能有一個自動化的用戶界面,但有人告訴我,你不能使用SendKeys將一個服務,因爲它是在會話0

編輯禁用:我實際上並不需要向用戶顯示GUI

回答

1

您可以顯示一個;它只是不顯示。

在任務欄中有一個關於有一個GUI窗口和切換到它的方法的小通知。

無論如何,實際上有一個TerminalServices API命令來切換活動會話,如果您真的需要它顯示,您可以調用。

0

您可以編寫一個單獨的進程爲您的服務進程提供UI。您的用戶界面和服務過程之間的溝通可以通過各種方式完成(搜索網絡中的「進程間通信」或「IPC」)。

0

您的服務可以有一個GUI。只是沒有人會看到它。正如MSDN的引用所暗示的,服務可以顯示一個對話框。撥打MessageBox不會失敗;它永遠不會回來 - 任何人都不會按下按鈕。

我不確定你想要「管理GUI」是什麼意思。你的意思是假裝將輸入發送到控件,如SendInput?我沒有理由認爲這是不可能的;畢竟,你會注入輸入到你自己的程序的隊列中,並且SendInput's Vista-specific warnings對此沒有任何說明。但我認爲你會讓事情變得比他們需要的複雜得多。重新審視這個想法,改變你的程序根本沒有UI。 (這與控制檯程序不一樣,控臺是UI)

而不是模擬單擊按鈕所需的鼠標消息,例如,消除中間人,直接調用按鈕 - 點擊事件會被調用。