从windows服务管理应用程序配置部分
本文关键字:配置部 应用程序 管理 windows 服务 | 更新日期: 2023-09-27 18:28:59
我有一个简单的C#窗口服务,它有一个应用程序配置,其中包含映射到我的类的自定义部分。此外,这个类与我的可执行文件位于不同的程序集中,但是该程序集位于我的可执文件的同一文件夹中。我想做的是通过installutil实用程序安装服务,然后管理OnAfterInstall事件,以便在运行时对我的应用程序配置进行一些操作。
然而,当我试图获得我班的部分时,我总是会遇到一个例外:
ConfigurationManager.GetSection("myCustomSection");
异常表明应用程序找不到我的类的类型定义(缺少引用或找不到文件exeception(它在另一个程序集中,但与我的服务在同一个文件夹中)。
我注意到,在OnAfterInstall(由installutil调用)中,environment.currentDirectory
是C:'windows'microsoft.NET'framework'v40..
,我认为这就是问题的原因。应用程序域与我预期的不同,很可能这就是问题所在。
简而言之,如果我试图在服务安装程序的OnAfterInstall事件中读取和写入应用程序配置的部分,这似乎是不可能的。有什么变通办法吗?
我知道你应该已经考虑过了,但作为为我的Windows服务编写配置信息的人,我从不写文件。特别考虑到它与另一个应用程序/程序集共享信息。我总是在windows注册表上写配置,然后在应用程序/服务启动时加载。
此外,在安装过程中,您可以设置这些设置。这将被放置在一个大多数用户不会更改的区域,也会使其更安全,这取决于您放置密钥的位置(只有具有安装权限的用户才能写入/删除条目)。
第二个选项,也是我最喜欢的第二个,是创建另一个类(xml可序列化)作为配置信息。然后你就可以读/写这个文件,而且对技术用户来说也是非常可读的。您可以设置此appconfig.xml在用户/系统窗口注册表项中的保存位置。