我有一个简单的C#windows服务,其app app包含一个映射到我的类的自定义部分。此外,此类位于与我的可执行文件不同的程序集中,但程序集位于我的可执行文件的同一文件夹中。 我要做的是通过installutil实用程序安装服务,然后管理OnAfterInstall事件,以便在运行时对我的应用程序配置进行一些操作。
然而,当我尝试获得班级的部分时,我总是得到一个例外:
ConfigurationManager.GetSection("myCustomSection");
异常说我应用程序无法找到我的类的类型定义(引用缺失或文件未找到exeception(在另一个程序集中,但它与我的服务位于同一文件夹中)。
我注意到在OnAfterInstall中(由installutil调用)environment.currentDirectory
是C:\windows\microsoft.NET\framework\v40..
,我认为这是导致问题的原因。应用领域与我的预期不同,很可能就是问题。
简而言之,如果我尝试在服务安装程序的OnAfterInstall事件中执行此操作,那么我的app配置似乎无法读取和写入部分。 有没有解决方法?
答案 0 :(得分:-1)
我知道您应该已经考虑过这一点,但在编写Windows服务的配置信息时,我从不写文件。特别考虑它与另一个应用程序/程序集共享信息。我宁愿总是在Windows注册表上编写配置,然后在app / service启动时加载它。
此外,在安装过程中,您可以设置这些设置。这将放置在大多数用户不会更改它的区域中,并且还会使其更安全,具体取决于您放置密钥的位置(只有具有安装权限的用户才能写入/删除条目)。
第二个选项,也是我最喜欢的第二个选项,是创建另一个类(xml serializable)作为配置信息。然后,您可以读/写此文件,对技术用户也非常易读。您可以在用户/系统Windows注册表项中设置此appconfig.xml的保存位置。