我知道這可能以前已經問過,但我似乎無法爲我找到正確的答案。windows服務 - 配置文件
我有一個Windows服務名爲foobar.exe。我有一個名爲的應用程序配置文件foobar.exe.config在同一個文件夾中。
是配置文件只在啓動時讀取?
我想更改配置文件,而無需重新啓動該服務,但是這是我能得到新的設置讀取的唯一途徑。
我在做什麼錯?
一個窗口服務可以有一個動態的配置文件?
我知道這可能以前已經問過,但我似乎無法爲我找到正確的答案。windows服務 - 配置文件
我有一個Windows服務名爲foobar.exe。我有一個名爲的應用程序配置文件foobar.exe.config在同一個文件夾中。
是配置文件只在啓動時讀取?
我想更改配置文件,而無需重新啓動該服務,但是這是我能得到新的設置讀取的唯一途徑。
我在做什麼錯?
一個窗口服務可以有一個動態的配置文件?
.NET應用程序將在啓動時讀取它們的配置文件,併爲了性能原因緩存它們。
我看到周圍這兩種基本方式:
,跟蹤上次更新日期/時間配置文件。定期檢查此最後更新日期,如果檢測到更改,請重新加載配置文件
Windows NT服務可以響應特殊的OnCustomCommand
事件。您可以實現這樣的事件處理程序重新加載配置,當你做更改配置,你可以有一個小工具來通知你的服務,它的配置已經改變,併發送「自定義命令」爲您服務
好的,請原諒我的無知。當我的進程檢測到配置文件已更改時,如何「重新加載」配置?我在我的代碼中使用ConfigurationManager.AppSettings [「SettingName」]。 – 2011-02-24 13:20:10
@hobbyman:你可以調用ConfigurationManager.RefreshSection(「appSettings」),當你下一次訪問它時,這個部分將從磁盤重新加載。請參閱[Configuration Manager MSDN文檔](http://msdn.microsoft.com/zh-cn/library/system.configuration.configurationmanager.refreshsection.aspx#Y102) – 2011-02-24 13:27:43
假設你的Windows服務是寫在.NET:
配置文件只在啓動時讀取。如果您更改配置中的值,則需要重新啓動服務才能獲取它們。
如果你想擁有動態配置,則需要自己實現 - 輪詢文件系統來查看是否配置文件更改和應用更改。
您可能需要查看使用FileSystemWatcher。參見下面的僞c#代碼示例。
private FileSystemWatcher _myWatcher;
protected override void OnStart(string[] args)
{
_myWatcher = new FileSystemWatcher();
_myWatcher.Path = path to config file;
_myWatcher.Changed += new FileSystemEventHandler(myWatcherFileChanged);
_myWatcher.NotifyFilter = NotifyFilters.LastWrite;
_myWatcher.EnableRaisingEvents = true;
}
protected override void OnStop()
{
_myWatcher.EnableRaisingEvents = false;
}
private void myWatcherFileChanged(object sender, FileSystemEventArgs e)
{
...
}
這個服務是用.NET編寫的嗎? – Oded 2011-02-24 13:03:04
是的,這是一個.NET網絡服務 – 2011-02-24 13:19:02