C# Windows 服务 XML

标签 c# windows xml service config

场景

我有一个用 C# 编写的 Windows 服务,它基于解析 XML 文件执行一些处理,并使用该数据执行各种任务。 该服务还执行各种日志记录 - 使用 APP.Config 文件中的设置。

问题

当服务编译、安装和运行时,XML文件似乎消失了。我的印象是它只是被忽略了或类似的东西。

到目前为止

我试过使用两个 App.Config 文件,一个名为 App.Config,其中包含服务设置,另一个名为 MyService.exe.config,其中包含 XML 文件中使用的所有数据(我的想法是我可以从实际编译并出现在我的安装目录中的配置文件中解析 XML。

然而

当我这样做时,所发生的只是出现一个配置文件(名称为 MyService.exe.config),但它包含 App.Config 文件的内容,而不是我要解析的 XML 数据。

我需要什么

我只想要一个用于我的设置的配置文件和一个用于我的数据的 XML 文件。

问题

这可能吗? 我知道该应用程序可以正常工作,因为它最初是作为运行良好的控制台应用程序构建的。

其他

应用程序必须以这种方式设计(例如,我需要将我的数据存储为 XML,并将我的设置存储在配置文件中)。

想法

如果我能以某种方式将两个文件的内容组合成一个配置文件,那将是解决问题的一种方法。但是,我已经尝试过这个,当然我得到了一个“类型初始化异常”,因为配置文件无法解释 XML 数据(可能是因为标签是自定义的并且不构成配置模式的任何部分 - 或者类似的东西) .

想法

请有人向我解释一下,如果我有一个 XML 文件和一个配置文件,当服务运行时,这些文件将实际编译并存储在我的安装目录中?

代码

自定义 XML/数据配置文件

   <?xml version="1.0" encoding="utf-8" ?> 
  <configuration> 
  <servers> 
<SV066930> 
  <add name="Name" value = "SV066930" /> 
  <processes> 
<SimonTest1> 
  <add name="ProcessName" value="notepad.exe" /> 
  <add name="CommandLine" value="C:\\WINDOWS\\system32\\notepad.exe    C:\\WINDOWS\\Profiles\\TA2TOF1\\Desktop\\SimonTest1.txt" /> 
          </SimonTest1> 
 </processes> 
  </SV066930> 
  </servers> 
 </configuration> 

APP.Config 设置文件

   <?xml version="1.0" encoding="utf-8" ?> 
  <configuration> 
   <configSections> 
     <section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=xxxxxxxxxxx" /> 
   </configSections> 
  <connectionStrings> 
 <add name="DB" connectionString="Data Source=etc......" /> 
  </connectionStrings> 
  </configuration> 

非常感谢帮助。

最佳答案

您还没有说明 XML 文件的构建操作是什么。您可以将其设为内容,在这种情况下应将其复制到输出目录,或者您可以将其设为嵌入式资源,在这种情况下它将嵌入到您的程序集中。

如果您不需要在构建后更改它,我会选择嵌入式资源方法 - 这意味着您无需担心其他文件。但是,它不太灵活,因为您之后无法更改文件。对于此选项,您将使用 Assembly.GetManifestResourceStream在执行时加载 XML 文件。

如果您选择内容方法,请注意进程的当前目录可能不是包含程序集的目录 - 您可以使用

string module = typeof(YourService).Assembly.GetModules()[0].FullyQualifiedName;
string directory = Path.GetDirectoryName(module);

找到目录,然后加载与该目录相关的文件。

关于C# Windows 服务 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2651163/

相关文章:

c# - Selenium Firefox 驱动程序 - 由于 "DirectoryNotFoundException"无法加载 FirefoxProfile

c# - 以编程方式启用录音设备

c++ - readv(), writev(), WSARecv(), WSASend()

java - 为什么jaxb会生成这样的代码?

c# - 从不带页眉/页脚的 Crystal Reports 导出到 Excel

c# - Linq to Sql - 更新正确的数据上下文

c# - 如何指定 T 是从其他接口(interface)继承的。通用比较器

c++ - 将数据传递到 Windows 控制台控制处理程序

java - 使用 DOM 生成 xml 文件

c# - 使用 RemoveChild() 删除子节点