2011-05-06 88 views
3

如何在運行時更改Windows Service的設置?與運行的Windows服務交互?

假設我將文件從一個目錄處理到另一個目錄。我希望能夠聲明下一個文件的輸出和操作(當服務正在運行時)。如果我可以通過網站遠程編輯它(SQL表或XML/TXT文件),那將是完美的。

是否有可能不重新啓動服務?我可以簡單地在服務「」中寫入每個文件讀取操作和從設置文件輸出「嗎?

我寧願避免現在的Windows Communication Foundation。

+0

這是一個恥辱,你想避免WCF。這將使與服務的豐富通信幾乎微不足道。 – 2011-05-06 16:11:17

回答

3

假設你還寫了Windows服務,您可以發送自定義命令到服務。從控制器端,您使用ServiceController.ExecuteCommand()發送命令。在服務類上,您覆蓋ServiceBase.OnCustomCommand()以處理這些命令。

但是,這隻會幫助您觸發某個操作。您仍然必須使用外部方法(例如共享配置文件)來傳達操作的詳細信息。

+0

+爲簡單起見。 – Phil 2011-05-06 13:49:31

2

yosh - 您提出的兩個選項可以工作,該服務可以在處理文件夾之前重複讀取文件settings.xml。您可以在不重新啓動服務的情況下遠程修改。

+0

輪詢文件系統? – Phil 2011-05-06 13:39:23

1

很多選項。有許多可以使用的進程間通信機制 - COM,套接字,命名管道,共享內存 - 爲管理界面提供「重新讀取設置」命令。

或者,您可以讓服務監視配置文件的更改;在Win32 API中,相關功能是FindFirstChangeNotification();不確定是否有管理的等價物,最壞的情況 - 使用P/Invoke。

0

你可以使用一個數據庫,保存和檢索信息,但除非你已經在使用一個數據庫,這可能是矯枉過正,以建立一個新的表,連接到它,等

我個人會建議使用* .config並使用OpenExeConfiguration。同時,公開一些可以訪問/修改這些設置的方法,然後在需要時使用它們。

最後,您可以擁有自己的具有這些值的XML文件並存儲/檢索值(甚至可以利用XmlSerializer),可以在處理時查詢這些值。