Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/273.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.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服务时找不到app.config_C#_Windows_Service_App Config - Fatal编程技术网

C# 启动windows服务时找不到app.config

C# 启动windows服务时找不到app.config,c#,windows,service,app-config,C#,Windows,Service,App Config,我有一个运行在Windows7上的CSharp windows服务。它从设备管理框架实例化dll。此dll在名为“pm.config”的app.config中存储了一些设置 我将所有程序集和pm.config文件复制到winsvc项目文件夹同一级别的名为“bin”的文件夹中 我添加了对dll框架的引用并编译了该项目。pm.config文件存在于“bin\debug”和“bin\release”子文件夹中。我使用installutil安装了winsvc并启动了winsvc。一切正常,只是当wins

我有一个运行在Windows7上的CSharp windows服务。它从设备管理框架实例化dll。此dll在名为“pm.config”的app.config中存储了一些设置

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

我添加了对dll框架的引用并编译了该项目。pm.config文件存在于“bin\debug”和“bin\release”子文件夹中。我使用installutil安装了winsvc并启动了winsvc。一切正常,只是当winsvc从framework dll调用“Initialize”方法时,该方法尝试打开pm.config文件并生成以下异常:

InnerException = {"The machine.config file 'pm.config' was not found.\r\nParameter name: machineConfigFilename"}
我已使用
assembly.getExecutionGassembly()检查了程序集位置。位置
它指向winsvc项目的正确文件夹,我的意思是“mysvcproject\bin\debug”文件夹

我很确定这和winsvc的安全上下文有关,但我不知道。我正在使用LocalService帐户启动winsvc,“bin\debug”对此帐户没有权限。相反,我完全控制了这个文件夹上的everyone帐户,但仍然得到了错误

我完全迷路了,有人能帮我吗


提前感谢

App.config文件名必须与Windows服务可执行文件的文件名相匹配,并带有“.config”App文件名。因此,如果您的服务是“pm.exe”,那么您的配置文件应该是“pm.exe.config”。

App.config文件名必须与您的Windows服务可执行文件的文件名匹配,并带有“.config”App。因此,如果您的服务是“pm.exe”,那么您的配置文件应该是“pm.exe.config”。

不久前,我在部署Windows服务时遇到过类似的问题。当时的问题是Windows服务希望文件位于c:\Windows\system32中。不要使用Assembly.getExecutionGassembly().Location进行检查,而是尝试Directory.GetCurrentDirectory(),看看这是否会产生相同的结果。如果没有,请尝试将pm.config文件放入当前目录。

不久前,我在部署Windows服务时遇到过类似问题。当时的问题是Windows服务希望文件位于c:\Windows\system32中。不要使用Assembly.getExecutionGassembly().Location进行检查,而是尝试Directory.GetCurrentDirectory(),看看这是否会产生相同的结果。如果没有,请尝试将pm.config文件放入当前目录。

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


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


我成功地将Daniel的解决方案与此解决方案相结合:


我成功地将Daniel的解决方案与此解决方案相结合:


我也遇到了这个问题,这行代码似乎解决了这个问题:Directory.SetCurrentDirectory(Path.GetDirectoryName(Assembly.getExecutionGassembly().Location))Hrrrmph!更改目录而不是移动文件几乎就像。。。高级解决方案:)我也遇到了这个问题,这行代码似乎解决了这个问题:Directory.SetCurrentDirectory(Path.GetDirectoryName(Assembly.getExecutionGassembly().Location))Hrrrmph!更改目录而不是移动文件几乎就像。。。高级解决方案:)我认为情况并非如此。当我将dll框架与一个简单的应用程序(如windows窗体应用程序)一起使用时,它运行良好。好的,windows服务应该有它自己的.config,但我的问题是找不到pm.config(它属于框架)。我想不是这样的。当我将dll框架与一个简单的应用程序(如windows窗体应用程序)一起使用时,它运行良好。好的,windows服务应该有自己的.config,但我的问题是找不到pm.config(它属于框架)。好的,根据答案,我有两个选择:1)将pm.config放在system32;2)将pm.config复制到win svc own.config。明天我将尝试这两种方法,并将结果发布在这里。根据答案,我有两个选择:1)将pm.config放在system32;2)将pm.config复制到win svc own.config。明天我将尝试这两种方法,并将结果发布在这里。提前谢谢我忘了提到它是一个承载WCF服务的windows服务。我不知道我是否需要一些特殊的配置来使用第三方dllsI,我忘了提到它是一个承载WCF服务的windows服务。我不知道我是否需要一些特殊的配置,以便使用第三方DLL
Configuration cfg = ConfigurationManager.OpenExeConfiguration(Assembly.GetExecutingAssembly().Location);
String MyValue = cfg.AppSettings.Settings["MyKey"].Value;