启动Windows服务时未findapp.config

我有一个Windows 7上运行的CSharp窗口服务。它从设备pipe理框架实例化一个DLL。 这个DLL有一些设置存储在一个名为“pm.config”的app.config中。

我将所有程序集和pm.config文件复制到与winsvc项目文件夹相同级别的名为“bin”的文件夹中。

我添加了对dll框架的引用并编译了该项目。 pm.config文件存在于“bin \ debug”和“bin \ release”子文件夹中。 我使用installutil安装了winsvc并启动了winsvc。 一切都很好,除了当winsvc从框架DLL调用“初始化”方法时,此方法尝试打开pm.config文件并生成以下exception:

InnerException = {"The machine.config file 'pm.config' was not found.\r\nParameter name: machineConfigFilename"} 

我已经使用Assembly.GetExecutingAssembly().Location检查了程序集位置,它指向winsvc项目的正确文件夹,我的意思是'mysvcproject \ bin \ debug'文件夹。

我很确定这是与winsvc的安全上下文有关,但我不知道。 我正在使用本地服务帐户来启动winsvc和'斌\debugging'没有这个帐户的权利。 相反,我完全控制了这个文件夹上的每个人帐户,但仍然有错误。

我完全失去了,有人能帮助我吗?

提前致谢

在部署Windows服务时,我不久前遇到过类似的问题。 问题在于Windows服务期望文件位于c:\ windows \ system32中。 而不是使用Assembly.GetExecutingAssembly()。位置来检查,请尝试Directory.GetCurrentDirectory(),看看是否产生相同的结果。 如果不是,请尝试将pm.config文件放在当前目录中。

App.config文件名必须与您的Windows服务可执行文件相匹配,并使用“.config”。 所以如果你的服务是“pm.exe”,你的配置文件应该是“pm.exe.config”。

正在执行的应用程序使用自己的app.config,而不是引用的dll中的。 您应该在正在执行的程序集中创建一个app.config,并将您的设置放在那里。

App.config为DLL

我已成功地将Daniel的解决方案与此解决方案相结合: https : //stackoverflow.com/a/7262937/771473

 Configuration cfg = ConfigurationManager.OpenExeConfiguration(Assembly.GetExecutingAssembly().Location); String MyValue = cfg.AppSettings.Settings["MyKey"].Value;