我知道之前可能已经提出这个问题,但我似乎找不到合适的答案。
我有一个名为 foobar.exe 的Windows服务。我在同一文件夹中有一个名为 foobar.exe.config 的应用程序配置文件。
配置文件是否仅在启动时读取?
我想更改配置文件而不必重新启动服务,但这是我可以读取新设置的唯一方法。
我做错了什么?
Windows服务是否有动态配置文件?
答案 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)
{
...
}