Windows服务无法从App.config中读取参数

时间:2013-10-01 14:36:26

标签: c# .net vb.net windows-services app-config

我创建了一个Windows服务,用于执行多个定期操作的自动程序(.Net代码),如备份,健全性检查,报告生成等。构建项目后,我使用installutil安装了服务。一切都很好。

我决定在App.config文件中为这些自动程序移动各种“静态”参数。我使用installutil /u卸载了以前版本的服务,并构建了该项目的新版本。在我的构建输出文件夹中,有一个AppName.exe文件和一个AppName.exe.config文件,正如我所料。我以管理员身份从VS 2012开发人员命令提示符中再次使用installutil安装了新版本的服务。

问题是该服务似乎无法从ConfigurationManager读取配置文件。对ConfigurationManager.AppSettings("paramname")的调用不会失败,但结果参数值为空字符串。据我所知,所有参数都会出现问题,而不仅仅是针对特定参数。参数位于<appSettings><configuration>部分,就像我之前在各种项目中多次完成的一样。

我不知道它是否有帮助,但我的服务在LocalSystem帐户上运行,并在安装后和Windows上自动启动。

我做错了什么?

编辑:我已经尝试过卸载/重新安装服务(多次),就像一些stackoverflow答案建议的那样。另外,我不打算在运行时更新/刷新文件。

2 个答案:

答案 0 :(得分:2)

我通过在运行时设置配置文件的位置来解决这个问题。这使我能够在任何地方放置和命名配置文件。我获取正在执行的程序集路径,然后检查配置文件是否存在。 Check the answer on this thread how to dynamically set the config file

这是我获取执行程序集的方式:

var path = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
var configFilePath = Path.Combine(path, "service.config");

希望这有帮助!

答案 1 :(得分:0)

原来我在声明的变量中获取配置值,该变量的名称与我用来存储值的属性相同。由于未知原因,我没有收到编译器的警告。由于无法调试Windows服务,解决方案是检查代码/从头开始重写此部分,就在我看到错误的时候。