2012-10-09 204 views
0

可能重複:
Loading GUI App from Windows Service在啓動時啓動服務並從服務啓動應用程序?

我需要啓動的.exe用戶的桌面上的一個服務。只要用戶登錄到桌面,我也需要此服務才能啓動。 (Windows 7平臺)

我確實有SENS事件,但不確定如何將上述拼圖放在一起。我也知道Runkey中的任何.exe會在窗口啓動時啓動,但我如何將我的服務放入Runkey?

任何幫助,將不勝感激。

謝謝。

回答

2

除了Windows服務之外,另一個選項是寫入托盤應用程序,當用戶以交互方式登錄時,托盤應用程序將在托盤中啓動。這消除了對始終運行的Windows服務的需求,並且必須檢測何時發生登錄。它將在登錄時從托盤中開始,以它們的形式運行,並且您可以在托盤應用程序中提供gui以啓動/停止服務。

這裏是S.O.崗位:

How can I make a .NET Windows Forms application that only runs in the System Tray?

如果你想在交互未登錄時,它總是甚至運行,那麼Windows服務是要走的路。

0

從Vista開始,這不應該像這樣完成,因爲服務被設計爲不能與桌面交互。這是關於這個主題的更深入的文件。

http://msdn.microsoft.com/en-us/windows/hardware/gg463353.aspx

通常情況下,你會把用戶啓動文件夾或類似桌面可執行程序,並將它與服務進行通信。

下面是影響你的那一段:

對於更復雜的交互,開發者應該將他們的UI代碼到用戶的會話中運行,並處理所有UI要求代理。代理通過RPC或命名管道與服務進行通信。如果用戶使用控制面板,Internet Explorer或類似的UI體驗啓動UI交互,則該UI體驗應啓動代理。代理然後處理所有UI交互。如果UI是必需的,但不是由用戶發起的,則服務必須請求代理啓動任何所需的UI,而不是嘗試單獨啓動該UI。在極少情況下,服務必須啓動用戶交互並且代理尚未運行,服務應調用CreateProcessAsUser API來啓動代理。代理可以啓動所有UI交互。開發人員仔細查看所有可能的使用場景並考慮將所有UI代碼移動到在用戶會話中運行的代理中,這一點非常重要。

+0

有沒有一個例子如何做到這一點,因爲我很無知:( – user1683517

+0

http://bloggingabout.net/blogs/dennis/archive/2010/06/16/wcf-simple-example-in-視覺工作室2010。aspx是一個製作自我託管的WCF服務的演練。這將由您的Windows服務託管。然後,您需要製作一個客戶端應用程序(可能winforms,因爲托盤圖片功能在WPF中不受支持),它將使用WCF服務。 – spender

相關問題