Windows 服务配置文件 C#
Posted
技术标签:
【中文标题】Windows 服务配置文件 C#【英文标题】:Windows Service Config File C# 【发布时间】:2010-10-01 03:50:11 【问题描述】:我使用 Visual Studio 2008 / C# 开发了一个 Windows 服务应用程序。
我在项目中有一个 app.config 文件。安装后,app.exe.config 文件出现在可执行文件旁边,但当我尝试通过 ConfigurationManager.AppSettings 访问它们时,它似乎没有从中读取值。
它是把配置文件复制到别处还是有其他我不知道的问题?
提前致谢,
马丁。
编辑: 配置文件名实际上是 my_exe_file_name.exe.config,它看起来像:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="RuntimeFrequency" value="3" />
</appSettings>
</configuration>
我正在尝试通过以下方式阅读:
ConfigurationManager.AppSettings["RuntimeFrequency"]
我经常看到的调试值是“1”而不是“3”。我在这里做错了吗?
【问题讨论】:
【参考方案1】:我找到了错误,它与文件权限有关。安装服务后,我的本地用户帐户无权修改 app.exe.config 文件。
我用来编辑的工具没有通知我它被拒绝访问以保存文件 - 如果有人感兴趣,那就是记事本++ - 所以我看不出它没有保存旧的配置文件。
现已解决,谢谢大家。
马丁。
【讨论】:
OP,请接受一个答案,这样它就不会一直出现在“未回答”的 SOF 查询中。 @granadaCoder 它不应该显示在“未回答”部分,因为它有一个赞成的答案;看来原发帖人的账号已经“消失”了,所以无法接受答案……【参考方案2】:当您处于调试模式时,请检查 my_exe_file_name.vshost.exe.config 中的设置并确保您在 app.config 文件中进行了调整。 Visual Studio 应该更新 bin/debug 文件夹中的最终配置文件。
【讨论】:
【参考方案3】:也许您正在更新错误的配置文件。你应该仔细检查使用
System.Configuration.ConfigurationManager.OpenExeConfiguration(PATH_TO_CONFIG);
【讨论】:
【参考方案4】:一般对于我编写的 Windows 服务,我将 appName.exe.config 文件放入 C:\WINDOWS\system32\
也许你在那个目录中有一个旧版本,这是你的服务获取价值的地方,即使你已经更新了项目中的配置文件。
【讨论】:
嗯,svchost.exe 运行windows 服务。并且 svchost.exe 存在于 %WINDIR%\System32 目录中。因此,将首先在该目录中搜索 myapplication.exe.config 文件。如果我错了,请纠正我。 如果您使用ConfigurationManager.AppSettings["my_var"]
,则不需要将您的 App.config 复制到 System32。如果你需要这样做,那是有问题的。如果您需要知道您的服务的 .exe 路径:System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase
@DaveBaghdanov svchost 不运行 所有 服务;您仍然可以将它们托管在自己的 EXE 中【参考方案5】:
App.config 文件应重命名为 your_exe_file_name.exe.config 并放在 exe 文件附近。
【讨论】:
【参考方案6】:是否有可能定义了多个 RuntimeFrequency 条目的实例? ConfigurationManager 从上到下读取文件并单独处理每个设置。因此,文件中定义的 RuntimeFrequency 的最后一个值就是它将使用的值。
如果您想确定是否正在使用您的文件,我会简单地删除或注释掉 RuntimeFrequency 的任何定义(确实会发生复制/粘贴错误)并等待在 ConfigurationManager 尝试引用条目时看到应用程序错误在 AppSettings 中不存在。
【讨论】:
以上是关于Windows 服务配置文件 C#的主要内容,如果未能解决你的问题,请参考以下文章