Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从windows服务管理应用程序配置部分_C#_Windows Services_Appdomain - Fatal编程技术网

C# 从windows服务管理应用程序配置部分

C# 从windows服务管理应用程序配置部分,c#,windows-services,appdomain,C#,Windows Services,Appdomain,我有一个简单的C#windows服务,带有一个应用程序配置,其中包含一个映射到我的类的自定义部分。此外,该类位于与我的可执行文件不同的程序集中,但是该程序集位于我的可执行文件的同一文件夹中。 我试图通过installutil实用程序安装服务,然后管理OnAfterInstall事件,以便在运行时对我的应用程序配置进行一些操作 但是,当我尝试获取类的某个部分时,总是会遇到一个异常: ConfigurationManager.GetSection("myCustomSection"); 异常表示应

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

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

ConfigurationManager.GetSection("myCustomSection");
异常表示应用程序找不到我的类的类型定义(reference missing或else file not found execption)(它位于另一个程序集中,但与我的服务位于同一文件夹中)

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

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

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

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


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

app.config在许多场景中都很常见,例如windows服务、控制台应用、wpf应用等。因此,我的自定义配置类在另一个场景中组装。我已经解决了以下stackoverflow post的问题: