【问题标题】:Windows service installer not reading App.Config fileWindows 服务安装程序未读取 App.Config 文件
【发布时间】:2011-11-29 20:09:50
【问题描述】:

我在我的项目中添加了 App.Config。 我有一个需要从 App.config 读取值的安装程序类(ProjectInstaller.cs)。 我正在提供钥匙。 以下是示例代码:

ConfigurationManager.AppSettings["CONFIG_FILE"]

当在 Installer 类中调用时,根据上面的代码,我得到空值。 但在 App.Config 文件中存在上述键的值。

【问题讨论】:

  • 请参阅stackoverflow.com/questions/379276/… 了解最新情况和最佳修复 - 您无法直接从安装程序中使用 app.config,因为您的应用程序实际上还没有运行。相反,它正在运行的是installutil。顺便提一下,当你写一个问题时,这个网站会建议可能的答案——阅读它们!

标签: c# windows-services installation app-config


【解决方案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 并在serviceInstallerprojectInstaller 中使用它们的好文章:

第 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

    【讨论】:

      猜你喜欢
      • 2013-03-12
      • 2018-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-11
      • 1970-01-01
      • 2013-09-09
      • 1970-01-01
      相关资源
      最近更新 更多