C# · 12月 22, 2021

C#Windows服务XML

脚本

我有一个用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);

找到该目录,然后加载相对于该文件的文件.