.net windows服务-配置文件
我知道以前可能有人问过这个问题,但我似乎找不到适合我的答案 我有一个名为foobar.exe的windows服务。我在同一文件夹中有一个名为foobar.exe.config的应用程序配置文件 配置文件是否仅在启动时读取? 我想在不重新启动服务的情况下更改配置文件,但这是读取新设置的唯一方法 我做错了什么?.net windows服务-配置文件,.net,windows-services,.net,Windows Services,我知道以前可能有人问过这个问题,但我似乎找不到适合我的答案 我有一个名为foobar.exe的windows服务。我在同一文件夹中有一个名为foobar.exe.config的应用程序配置文件 配置文件是否仅在启动时读取? 我想在不重新启动服务的情况下更改配置文件,但这是读取新设置的唯一方法 我做错了什么? windows服务能否具有动态配置文件?假设您的windows服务是用.NET编写的: 配置文件仅在启动时读取。如果更改配置中的值,则需要重新启动服务,以便拾取这些值 如果您想进行动态配置,
windows服务能否具有动态配置文件?假设您的windows服务是用.NET编写的: 配置文件仅在启动时读取。如果更改配置中的值,则需要重新启动服务,以便拾取这些值
如果您想进行动态配置,您需要自己实现此功能—轮询文件系统以查看配置文件是否已更改并应用更改。.NET应用程序将在启动时读取其配置文件,并出于性能原因对其进行缓存 我认为有两种基本的解决方法:
- 在您的服务中,跟踪配置文件的上次更新日期/时间。定期检查上次更新日期,如果检测到更改,请重新加载配置文件
- Windows NT服务可以响应特殊事件。您可以实现这样一个事件处理程序来重新加载配置,当您更改配置时,您可以使用一个小实用程序向您的服务发出配置已更改的信号,并将该“自定义命令”发送给您的服务
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编写的吗?是的,这是一个.NET web服务好的,请原谅我的无知。当我的进程检测到配置文件已更改时,如何“重新加载”配置?我正在代码中使用ConfigurationManager.AppSettings[“SettingName”]。@hobbyman:您可以调用
ConfigurationManager.RefreshSection(“AppSettings”)
,当您下次访问该分区时,该分区将从磁盘重新加载。见