Windows服务安装程序不读取应用程序配置文件
本文关键字:读取 应用程序 配置文件 程序 服务 安装 Windows | 更新日期: 2023-09-27 18:10:29
我已经在我的项目中添加了App.Config。我有一个安装程序类(ProjectInstaller.cs)需要从App.config读取值。我提供钥匙。下面是示例代码:
ConfigurationManager.AppSettings["CONFIG_FILE"]
我得到空值按照上面的代码,在安装程序类调用时。但是在App.Config文件中,上述键的值是存在的。
尝试:
public string GetServiceNameAppConfig(string serviceName)
{
var config = ConfigurationManager.OpenExeConfiguration(Assembly.GetAssembly(typeof(MyServiceInstaller)).Location);
return config.AppSettings.Settings[serviceName].Value;
}
Google帮助:http://social.msdn.microsoft.com/Forums/ar/winformssetup/thread/896e110e-692d-4934-b120-ecc99b01c562
关键是你的安装程序是而不是单独作为exe运行,并且默认情况下不会加载app.config,因为运行安装程序的exe是InstallUtil.exe,它最终会从文件InstallUtil.exe中搜索appSettings。配置,这不是你的,也不是你想要的,阅读以下并检查链接…
如果您通过InstallUtil调用它,那么配置文件是定义为InstallUtil.exe.config,这不是您想要的。你可以手动加载配置文件使用配置,但它会吗可能有点乱
诀窍在于安装程序类的执行上下文中。如果你使用InstallUtil安装应用程序,所有代码将在与InstallUtil.exe进程相同。如果需要传递一些数据给类,您应该使用安装参数。它们在安装、提交、执行环境的回滚和卸载方法(installutil, Windows安装程序…)。您可以访问这些参数
使用安装类的installcontext属性。CodeProject上有一篇关于安装项目的优秀文章和参数:http://www.codeproject.com/dotnet/SetupAndDeployment.asp
查看http://msdn2.microsoft.com/en-us/library/system.configuration.install.installcontext.aspx
Davide Piras很好地解释了为什么你不能使用你的app.config,并建议将你的值作为参数传递。
我找到了一篇关于如何将参数传递给installutil.exe
并在serviceInstaller
或projectInstaller
中使用它们的很好的有用文章:
第1部分:使用InstallUtil参数
第2部分:使用InstallUtil的参数配置Windows服务
它简单地解释了如何传递参数以及如何读取参数。
对我来说,最简单的解决方案是创建InstallUtil.exe.config文件,并用应用程序配置文件中的内容填充它。服务安装程序已成功读取此配置文件。
我通过以下步骤创建了我的服务:在托管Windows服务中托管WCF服务