Windows 服务安装程序未读取 App.Config 文件
Posted
技术标签:
【中文标题】Windows 服务安装程序未读取 App.Config 文件【英文标题】:Windows service installer not reading App.Config file 【发布时间】:2011-11-29 20:09:50 【问题描述】:我在我的项目中添加了 App.Config。 我有一个需要从 App.config 读取值的安装程序类(ProjectInstaller.cs)。 我正在提供钥匙。 以下是示例代码:
ConfigurationManager.AppSettings["CONFIG_FILE"]
当在 Installer 类中调用时,根据上面的代码,我得到空值。 但在 App.Config 文件中存在上述键的值。
【问题讨论】:
请参阅***.com/questions/379276/… 了解最新情况和最佳修复 - 您无法直接从安装程序中使用 app.config,因为您的应用程序实际上还没有运行。相反,它正在运行的是installutil
。顺便提一下,当你写一个问题时,这个网站会建议可能的答案——阅读它们!
【参考方案1】:
试试:
public string GetServiceNameAppConfig(string serviceName)
var config = ConfigurationManager.OpenExeConfiguration(Assembly.GetAssembly(typeof(MyServiceInstaller)).Location);
return config.AppSettings.Settings[serviceName].Value;
【讨论】:
此解决方案有效,不需要安装项目。谢谢。 迄今为止最好的解决方案。【参考方案2】:谷歌帮助:http://social.msdn.microsoft.com/Forums/ar/winformssetup/thread/896e110e-692d-4934-b120-ecc99b01c562
关键是您的安装程序不单独作为 exe 运行,并且默认情况下不会加载您想象的任何名称的 app.config,因为运行安装程序的 exe 是 InstallUtil.exe 并且它最终会从文件 InstallUtil.exe.config 中搜索 appSettings,该文件不是您的,也不是您想要的,请阅读以下内容并检查链接...
如果你通过 InstallUtil 调用它,那么配置文件是 定义为 InstallUtil.exe.config 这不是您想要的。你 可以使用 Configuration 手动加载配置文件,但它会 可能有点乱
诀窍在于安装程序类的执行上下文。如果你 使用 InstallUtil 安装您的应用程序,所有代码都将在 与 InstallUtil.exe 相同的过程。如果您需要将一些数据传递给 部署期间的安装程序类,您应该使用安装参数。 它们在执行安装、提交、 执行环境的回滚和卸载方法 (安装工具,Windows 安装程序...)。您可以访问那里的参数 使用安装程序类的 InstallContex 属性。
CodeProject 上有一篇关于安装项目的优秀文章 和参数: http://www.codeproject.com/dotnet/SetupAndDeployment.asp
退房 http://msdn2.microsoft.com/en-us/library/system.configuration.install.installcontext.aspx
【讨论】:
谢谢 Davide,我在 App.Config 中定义了一些重要的关键值。我需要阅读它们。我没有办法得到它。我是否需要创建物理 xml 文件。 正如我在回答中所写的,请阅读这个:codeproject.com/KB/install/SetupAndDeployment.aspx【参考方案3】:Davide Piras 很好地解释了为什么不能使用 app.config 并建议将值作为参数传递。
我发现了一篇关于如何将参数传递给installutil.exe
并在serviceInstaller
或projectInstaller
中使用它们的好文章:
第 1 部分:Using Parameters with InstallUtil
第 2 部分:Configuring Windows Services with Parameters from InstallUtil
它非常简短地解释了如何传递参数以及如何读取它们。
【讨论】:
【参考方案4】:对我来说,最简单的解决方案是创建 InstallUtil.exe.config 文件,并用应用程序配置文件中的内容填充它。服务安装程序已成功读取此配置文件。
我按照以下步骤创建了我的服务:Host a WCF Service in a Managed Windows Service
【讨论】:
以上是关于Windows 服务安装程序未读取 App.Config 文件的主要内容,如果未能解决你的问题,请参考以下文章
使用 App.Config 在 Windows 服务中的 WCF 命名管道