【发布时间】:2011-05-29 00:24:12
【问题描述】:
我有一个 Windows 服务,它从外部文件中读取配置设置,该外部文件位于与 Windows 服务的可执行文件路径不同的路径。 Windows 服务使用 FileSystemWatcher 来监视外部配置文件的更改,当配置文件更改时,它应该通过从配置文件中读取更新的设置来刷新内存中的设置。但这是我得到一个异常“ConfigurationErrorsException”的地方,消息是“为appSettings创建配置节处理程序时出错:进程无法访问文件'M:\somefolder\WindowsService1.Config',因为它正在被使用另一个过程。”内部异常实际上是带有相同消息的“IOException”。这是代码。我不确定代码有什么问题。请帮忙。
protected void watcher_Changed(object sender, FileSystemEventArgs e)
{
ConfigurationManager.RefreshSection(ConfigSectionName);
WriteToEventLog(ConfigKeyCheck);
if (FileChanged != null)
FileChanged(this, EventArgs.Empty);
}
private void WriteToEventLog(string key)
{
if (EventLog.SourceExists(ServiceEventSource))
{
EventLog.WriteEntry(ServiceEventSource,
string.Format("key:{0}, value:{1}", key, ConfigurationManager.AppSettings[key]));
}
}
【问题讨论】:
-
配置文件如何变化?用户正在编辑文件还是应用程序正在更新文件?如果用户正在编辑它,他们可以使用像 notepad++ 这样的非锁定编辑器,如果应用程序正在编辑它,它也应该尽量避免锁定文件。无论如何,我的回答应该可以帮助您处理文件锁定问题。
-
由用户而非应用程序编辑。我使用 Visual Studio 更新配置文件(应用程序仍在开发中)。
标签: c# configuration windows-services app-config