Windows服务 - 配置文件

时间:2011-02-24 12:59:36

标签: .net windows-services

我知道之前可能已经提出这个问题,但我似乎找不到合适的答案。

我有一个名为 foobar.exe 的Windows服务。我在同一文件夹中有一个名为 foobar.exe.config 的应用程序配置文件。

配置文件是否仅在启动时读取?

我想更改配置文件而不必重新启动服务,但这是我可以读取新设置的唯一方法。

我做错了什么?

Windows服务是否有动态配置文件?

3 个答案:

答案 0 :(得分:7)

.NET应用程序将在启动时读取其配置文件,并出于性能原因对其进行缓存。

我认为有两种基本方法:

  • 在您的服务中,跟踪配置文件的上次更新日期/时间。定期检查此最后更新日期,如果检测到更改,请重新加载配置文件

  • Windows NT服务可以响应特殊的OnCustomCommand事件。您可以实现这样的事件处理程序来重新加载配置,当您更改配置时,您可以使用一个小实用程序向您的服务发信号通知配置已更改并将“自定义命令”发送到您的服务

答案 1 :(得分:2)

假设您的Windows服务是用.NET编写的:

配置文件仅在启动时读取。如果更改配置中的值,则需要重新启动服务才能获取它们。

如果您想进行动态配置,则需要自己实现 - 轮询文件系统以查看配置文件是否已更改并应用更改。

答案 2 :(得分:2)

您可能需要查看使用FileSystemWatcher。请参阅下面的pseudo-c#-code示例。

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)
{
...
}