c# - Windows 服务无法从 App.config 读取参数

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

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

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

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

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

我做错了什么?

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

最佳答案

我通过在运行时设置配置文件的位置解决了这个问题。这使我能够在任何我想要的地方放置和命名配置文件。我获取执行程序集路径,然后检查配置文件是否在那里。 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");

希望这有帮助!

关于c# - Windows 服务无法从 App.config 读取参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19119041/

相关文章:

c# - ds.Tables[0].Select() 代表什么

c# - 为什么C#只允许最后一个参数为 "params type"

c# - 将 C# 代码转换为 IL 代码

.net - C# 如果我以优先级 = RealTime 运行进程,GC 会发生什么?

MySQL 登录对我有用,但对我使用 VB 的 friend 不行

c# - 以编程方式重置 Windows XP 空闲时间

c# - 日期时间格式问题

c# - 比较 C# 中的两个 XmlNode

c# - .Net 正则表达式处理中 "$"限定符的潜在不当行为

c# - 没有在网页上获取任何表单元素