Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net windows服务-配置文件_.net_Windows Services - Fatal编程技术网

.net windows服务-配置文件

.net windows服务-配置文件,.net,windows-services,.net,Windows Services,我知道以前可能有人问过这个问题,但我似乎找不到适合我的答案 我有一个名为foobar.exe的windows服务。我在同一文件夹中有一个名为foobar.exe.config的应用程序配置文件 配置文件是否仅在启动时读取? 我想在不重新启动服务的情况下更改配置文件,但这是读取新设置的唯一方法 我做错了什么? windows服务能否具有动态配置文件?假设您的windows服务是用.NET编写的: 配置文件仅在启动时读取。如果更改配置中的值,则需要重新启动服务,以便拾取这些值 如果您想进行动态配置,

我知道以前可能有人问过这个问题,但我似乎找不到适合我的答案

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

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

我想在不重新启动服务的情况下更改配置文件,但这是读取新设置的唯一方法

我做错了什么?


windows服务能否具有动态配置文件?假设您的windows服务是用.NET编写的:

配置文件仅在启动时读取。如果更改配置中的值,则需要重新启动服务,以便拾取这些值


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

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

我认为有两种基本的解决方法:

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

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


您可能需要了解如何使用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编写的吗?是的,这是一个.NET web服务好的,请原谅我的无知。当我的进程检测到配置文件已更改时,如何“重新加载”配置?我正在代码中使用ConfigurationManager.AppSettings[“SettingName”]。@hobbyman:您可以调用
ConfigurationManager.RefreshSection(“AppSettings”)
,当您下次访问该分区时,该分区将从磁盘重新加载。见