2009-02-11 47 views
0

更新:我們仍在使用XP在工作中,我得到了我的解決方案的工作,但現在知道,Vista和以後有我要的孤立會話實現一個WCF IPC ...Windows服務通知用戶可見

我有一個Windows服務,需要通知用戶發生某種類型的事件。我決定,類似於電子郵件通知消息的東西會有意義。使用WPF做這樣一個簡單的UI也是有意義的。這可以讓我學習一些基礎知識。

我運行一個線程:

然後,我設置了對象,並調用調用DoubleAnimation.BeginAnimation

private void RunUserNotificationOnIndependantThread() 
    { 
     UserNotificationWithImage test = new UserNotificationWithImage(); 

     test.Title = _title; 
     test.Url = _url; 
     test.Message = _message; 

     test.LoadUserNotification(); 
    } 

    public void LoadUserNotification() 
    { 
     Rect workAreaRectangle = System.Windows.SystemParameters.WorkArea; 
     Left = workAreaRectangle.Right - Width - BorderThickness.Right; 
     Top = workAreaRectangle.Bottom - Height - BorderThickness.Bottom; 

     _fadeInAnimation.Completed += new EventHandler(_fadeInAnimation_Completed); 

     // Start the fade in animation 
     BeginAnimation(UserNotificationBase.OpacityProperty, _fadeInAnimation); 
    } 

調試器到達BeginAnimation(...)的方法,並沒有窗口出現。這是甚至可能的,或者我在做這個錯誤的嘗試?

的UserNotification代碼是基於由尼克·安德森在博客:WPF Desktop Alert blog

感謝您的幫助!

+0

感謝您的幫助,我沒有意識到孤立的桌面。我將能夠得到這個工作。這很有意義,這將需要IPC。 – javelinBCD 2009-02-11 16:25:35

回答

3

在XP是與桌面交互的服務有兩個嚴重的問題需要克服 - 當沒有用戶登錄和幾個當用戶(快速用戶切換登錄該做什麼做什麼和終端服務是登錄多個用戶的兩種最常見的方式)。

在Vista上,爲了安全起見,服務自己孤立在桌面上運行,所以你表現出任何UI會去那個特別的桌面使用戶無法訪問過的。

你應該寫在用戶的桌面上運行一個小的GUI程序,並使用某種類型的IPC(遠程處理,SOAP,REST,命名管道,文件,不管你喜歡)與服務進行通信。

1

一般來說,我不會推薦Windows服務直接與用戶桌面進行交互。作爲一個簡單的例子,問題就出現了,因爲服務可能會在任何用戶登錄之前啓動。我的建議是創建一個小應用程序,該應用程序通過用戶會話啓動,並通過IPC(進程間通信)(如WCF)傳遞給Windows服務。

但是如果你確實想讓它運行,我的提示會打開「允許與桌面交互」服務,我似乎記得這個開關在Vista下根本無法工作,但有人否則應該確認。

HTH 亞歷