我创建了一个 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/