【问题标题】:app.config not found when starting windows service启动 Windows 服务时找不到 app.config
【发布时间】:2012-09-20 19:10:39
【问题描述】:

我有一个在 Windows 7 上运行的 CSharp Windows 服务。它从一个用于设备管理的框架中实例化一个 dll。此 dll 有一些设置存储在名为 'pm.config' 的 app.config 中。

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

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

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

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

我很确定这与 winsvc 的安全上下文有关,但我不知道。我正在使用 LocalService 帐户来启动 winsvc,而 'bin\debug' 没有此帐户的权限。相反,我完全控制了此文件夹上的所有人帐户,但仍然出现错误。

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

提前致谢

【问题讨论】:

  • 我忘了提到它是一个托管 WCF 服务的 Windows 服务。我不知道是否需要一些特殊配置才能使用第三方 dll

标签: c# windows service app-config


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    App.config for dll

    【讨论】:

    • 好的,根据答案,我有两个选择:1)将pm.config放在system32 2)将pm.config复制到win svc自己的.config。明天我会尝试并在此处发布结果。提前致谢
    【解决方案3】:

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

    【讨论】:

    • 我也遇到过这个问题,这行代码似乎解决了这个问题: Directory.SetCurrentDirectory(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location))
    • 哎呀!更改目录而不是移动文件似乎是一个......优秀的解决方案:)
    【解决方案4】:

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

    【讨论】:

    • 我认为情况并非如此。当我将 dll 框架与一个简单的应用程序(如 Windows 窗体应用程序)一起使用时,它可以正常工作。好的,windows服务应该有自己的.config,但我的问题是找不到pm.config(属于框架)。
    猜你喜欢
    • 2018-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-25
    • 1970-01-01
    • 2011-03-06
    • 1970-01-01
    • 1970-01-01
    • 2010-09-18
    相关资源
    最近更新 更多