我創建了一個C#windows服務(Serv.exe),它負責在正在運行的應用程序(A.exe)的請求下執行各種任務,其中一些可能需要很長時間並且我需要一種方法來從調用應用程序(A.exe)中瞭解我所請求的操作(在服務上運行)的狀態。如何獲取Windows服務自定義狀態? [C++/C#]
目前我已經開始實現這個的方法是通過使用ControlService(句柄,命令,狀態)向服務發送自定義命令來執行被請求的任務,我也使用QueryServiceStatus(句柄,狀態)從SCM獲得服務的狀態 - 所以基本的管道工作就在那裏並且正在工作。
現在我遇到的問題是,在發送我的ControlService命令(工作正常)後,調用應用程序(A.exe)繼續運行,並且在某個點上,它需要知道它請求的服務任務是否完成 - 因此我正在尋找一種方法來查詢服務來報告自定義狀態,而不是實際服務的標準運行,停止,掛起,暫停狀態,但是我使用ControlService()所做的請求的狀態請求。
這是可能的嗎? 任何幫助或暗示都會受到人們的讚賞。
感謝,
看看使用套接字,管道或RPC(或者像註冊表這樣的詭計)而不是使用Windows消息傳遞的原因,它將無法在Vista中運行,因爲微軟已經在使用會話的服務和應用程序之間實現了隔離。 – 2009-08-21 16:49:08
這將是更喜歡的方法?問題是我每隔23分鐘只發送一次命令到服務器,所以打開端口和通道/管道似乎是過度殺傷性的 - 我認爲Command很好,因爲它非常簡單,並確保交付,而不用擔心安全,權限等等。 那麼有沒有辦法讓自定義狀態回來? – Shaitan00 2009-08-21 16:50:30
我其實很喜歡Pipes(我喜歡的方法),特別是如果你使用C#。命名管道和匿名管道工作得非常好,開銷相當低。如果您的客戶端應用程序與服務在同一臺計算機上運行,則它們特別容易。這種方法的另一個優點也是易於擴展。隨着時間的推移,你總是可以添加更多的消息。管道可以是雙向的,所以服務器可以直接通知客戶端(不需要查詢)等。 – 2009-08-21 16:57:38