Windows服务,app.config中appSettings的奇怪行为

时间:2011-05-24 10:29:42

标签: c# windows service config appsettings

我正在开发一个具有共享核心组件的项目,该组件使用相应配置文件中的<appSettings />部分。

这适用于使用web.config的asp.net Web部件。

但是,有一个Windows服务使用同一个共享核心组件,它(由于各种原因)直接从内部访问配置数据(即嵌入式调用ConfigurationManager.AppSettings["key"]),这是我无法轻易重构的。< / p>

这不是问题,但我发现Web服务似乎无法获取我已添加到其app.config中的appSettings值。当我将它部署到开发服务器时,当然它变为ServiceName.exe.config并且配置文件正常运行(它还包含一些按预期工作的<applicationSettings />类型安全设置。

由于我无法轻易更改共享组件,因此我不得不在Service的app.config文件中使用<appSettings />

我检查的事情:结构似乎很好:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
        <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
            <section name="xxxxx.UploadManagerService.UploadManager" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
        </sectionGroup>
    </configSections>
    <applicationSettings>
        <xxxxx.UploadManagerService.UploadManager>
            <setting name="NumberOfUploaderThreads" serializeAs="String">
                <value>2</value>
            </setting>
             :
        </xxxxx.UploadManagerService.UploadManager>
    </applicationSettings>

  <appSettings>
    <add key="keyname" value="value" />
     :
  </appSettings>

</configuration>

(其中:表示'更多相同': - )

服务运行正常,除非核心组件中的方法尝试访问任何<appSettings />值。

有没有办法让它与Windows服务一起正常工作?我看不出它为什么不能正常工作的任何理由,但它没有(当它试图访问任何值时抛出异常)。

这是一个崩溃的地方的碎片:

return SendEmailViaAmazonSES(
          new List<string> { clientEmailAddress },
            ConfigurationManager.AppSettings["SalesEmail"],
            "Order Confirmation.",
            content);

...幸运地被困在try:catch中,因此没有任何事情发生变化但是ConfigurationManager.AppSettings["key"]调用始终被使用,我无法改变它们而不会对已使用此核心的其他系统产生重大影响成分

有什么想法吗?

我检查过的其他事情:服务配置文件IS与服务exe在同一个文件夹中,dev config包含正确的值。

编辑25/5

因为该服务只调用了一些需要访问<appSettings />值的方法,所以我只是通过将这些方法复制到服务本身并使用<applicationSettings />中的值来欺骗。它并不理想,我仍然非常想知道为什么这对Windows服务不起作用,但是我不能等待,所以我采取了务实的决定,同时“捏造它”。我总是可以在稍后的某个时候回到这一点,或者(如果发生的话)忘掉它的一切; - )

1 个答案:

答案 0 :(得分:0)

文件权限

查看运行Windows服务的用户是否具有对其.config文件的读取权限。

Sysinternals Process Monitor

使用Sysinternals Process Monitor并按服务名称进行过滤,以查看该过程是否真的试图通过您期望的路径访问您的文件。