2

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

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

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

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

我做错了什么?

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

4

2 回答 2

2

我通过在运行时设置配置文件的位置解决了这个问题。这使我能够在任何我想要的地方放置和命名配置文件。我获取执行的程序集路径,然后检查配置文件是否存在。检查this thread上的答案如何动态设置配置文件

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

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

希望这可以帮助!

于 2013-10-02T11:48:51.550 回答
0

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

于 2013-10-09T12:46:05.627 回答