【问题标题】:Manage app config section from windows service [duplicate]从 Windows 服务管理应用程序配置部分 [重复]
【发布时间】:2014-11-03 19:01:59
【问题描述】:

我有一个简单的 C# Windows 服务,其中包含一个映射到我的类的自定义部分的应用配置。此外,该类与我的可执行文件位于不同的程序集中,但是该程序集位于我的可执行文件的同一文件夹中。 我要做的是通过 installutil 实用程序安装服务,然后管理 OnAfterInstall 事件以便在运行时对我的应用配置进行一些操作。

但是,当我尝试获取班级的某个部分时,我总是会遇到异常:

ConfigurationManager.GetSection("myCustomSection");

异常说我的应用程序无法找到我的类的类型定义(引用丢失或找不到文件异常(它在另一个程序集中,但它与我的服务在同一个文件夹中)。

我注意到在 OnAfterInstall(由 installutil 调用)中,environment.currentDirectoryC:\windows\microsoft.NET\framework\v40..,我认为这就是问题的原因。应用程序域与我的预期不同,这很可能是问题所在。

简而言之,如果我尝试在服务安装程序的 OnAfterInstall 事件中执行此操作,我的应用程序配置的读写部分似乎是不可能的。 有什么解决办法吗?

【问题讨论】:

  • app.config在windows service、console app、wpf app等很多场景中都很常见。所以,我的自定义配置类在另一个程序集中。
  • 我已经通过以下 stackoverflow 帖子解决了这个问题:stackoverflow.com/questions/1682681/…

标签: c# windows-services appdomain


【解决方案1】:

我知道您应该已经考虑过这一点,但是在为我的 Windows 服务编写配置信息时,我从不写文件。特别考虑到它与另一个应用程序/程序集共享信息。我宁愿总是在 Windows 注册表上编写配置,然后在应用程序/服务启动时加载它。

此外,在安装过程中,您可以设置这些设置。这将放置在大多数用户不会更改的区域中,并且还会根据您放置密钥的位置使其更安全(只有具有安装权限的用户才能写入/删除条目)。

第二个选项,也是我最喜欢的第二个选项,是创建另一个类(xml 可序列化)作为您的配置信息。然后,您可以读取/写入此文件,并且对于技术用户来说也非常易读。您可以在用户/系统窗口注册表项中设置此 appconfig.xml 的保存位置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-21
    • 2018-12-26
    • 1970-01-01
    • 2013-12-18
    • 2010-09-15
    • 2011-11-21
    • 1970-01-01
    相关资源
    最近更新 更多