【问题标题】:Windows Service Config File C#Windows 服务配置文件 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”。我在这里做错了吗?

【问题讨论】:

    标签: c# configuration


    【解决方案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 中不存在。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2011-02-08
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-06-12
            • 2010-11-16
            • 1970-01-01
            相关资源
            最近更新 更多