2009-01-21 57 views
2

當應用程序作爲Windows服務(用.NET編寫)運行時,檢測用戶是否登錄以及用戶何時登錄,以便能夠開始顯示所需內容的最佳方法是什麼對話框,還是該用戶註銷時,可以防止顯示對話框?如何檢測窗口是否可以顯示?

我希望我正確地表述這個:)

回答

4

你不應該從一個服務做這個的。首先,默認情況下,服務無法訪問桌面。您可以在Vista的Windows版本中更改此版本,方法是在服務的屬性對話框中選中「允許服務與桌面交互」複選框,但這是一個非常糟糕的主意。

在Vista中,服務無法與桌面進行交互。

您正在假設當時機器上只有一個交互式用戶,但情況並非總是如此。由於終端服務,您可以讓多個用戶登錄交互式會話。

你應該做的是創建一個小型客戶端程序,在用戶登錄時啓動。該程序將通過一些分佈式技術(如Remoting或WCF,我推薦後者)與服務交互。基於從服務器接收到的通信,該客戶端程序可以啓動對話框和用戶界面元素以與用戶交互。

+0

我真的很想避免讓兩個單獨的進程運行來實現這一點,但我想這是唯一的方法:( – hmcclungiii 2009-01-21 17:58:55

0

無論用戶是否登錄,您都無法在服務中顯示任何用戶界面。出於安全原因,該服務將運行在不同的桌面上 - 可以繞過此操作,但請不要「T。最好的辦法是有一個單獨的程序來顯示你的UI,然後在兩者之間使用某種形式的進程間通信。