2009-04-24 63 views
1

用C#編寫的服務無法向桌面提供視覺反饋是真的嗎?來自C#服務的視覺反饋

據我所知,服務在用戶登錄前啓動,在這一點療法沒有可用的桌面。我的問題是,除了在系統事件日誌中記錄事件,這不是與用戶進行通信的非常有效的方式之外,我還有什麼替代方法來顯示服務中的消息框?

只有兩個選項浮現在腦海中:

  1. MessageBox.Show - 環顧四周,似乎這不會是一個選項。
  2. 顯示自定義表單

我還沒有給出爲什麼這個消息框需要顯示的原因。 請認爲它需要顯示,因爲我不想對「良好做法」做出迴應。至少在這一點上。

回答

4

Windows服務不應該與用戶進行交互。相反,您應該創建一個單獨的控制或配置應用程序 - 通常放在系統托盤中 - 與服務進行通信,向用戶呈現信息或收集輸入。

看到這個Knowledge Base articleMSDN article如果你真的想這樣做。他們包含一些提示如何實現這一點,你可能需要使用C#中的P/Invoke。

1

Here are some ways that you can make interactive services.但是,那些已經與Vista消失。你可以有一個用戶得到服務信息

一種方式是打造爲目的的獨立的UI。例如,該服務可能有一個WCF端點,並將GUI顯示的消息推送出去。這樣,當用戶登錄時只顯示一條消息,並且通過從LocalSystem帳戶彈出一個窗口,這不是安全風險。您可以輕鬆地從托盤中運行此GUI並彈出烘烤麪包,因此它非侵入式,並在用戶登錄時開始,這比嘗試直接與桌面進行交互要好得多。

1

我從來沒有使用過它,並且包括了關於不這樣做的所有免責聲明。

但是,您可能要檢查出MessageBoxOptions.ServiceNotification枚舉。

Here's a good blog post詳細介紹它的使用。