【问题标题】:Service cannot find referenced DLLs服务找不到引用的 DLL
【发布时间】:2014-01-06 22:10:33
【问题描述】:

我有一个 C# 服务应用程序,它引用了一个 dll('A'),而后者又引用了其他 dll(例如,'B' 和 'C')。服务项目引用了所有必要的 dll。

入口代码调用“A”中的方法,该方法调用“B”或“C”中的方法。我们从“A”收到一条自定义错误消息,指出“B”和“C”无法找到,尽管它们与服务位于同一文件夹中,并且我们知道这表示进程工作文件夹不正确(即进程认为工作文件夹在别处)。

问题是:如何明确告诉服务工作文件夹是什么?

TIA

【问题讨论】:

  • 您如何托管服务?

标签: c# .net service


【解决方案1】:

事实证明,关键是我必须欺骗服务以为工作文件夹是服务可执行文件所在的位置,这要归功于上面的一些链接,我现在可以很容易地在代码中做到这一点。

【讨论】:

    【解决方案2】:

    Services run in System32

    如果将 B.dll 和 C.dll 复制到 System32 文件夹中,它可能会起作用。

    要修复它,您应该在解决方案中创建一个安装程序项目。安装程序将处理在正确位置安装所有必要的 .dll。

    Here's a SO example

    编辑#1:

    This post 是最后一块拼图。 DLL 必须与原始项目分开添加到安装项目中。

    【讨论】:

    • 我应该提到 - 我有一个安装程序和一个设置和部署项目,用于安装服务,并且 dll 实际上位于服务可执行文件夹中。但它似乎仍然对在哪里寻找它们感到困惑。
    • @NeilHaughton 编辑了我的帖子。我无法在我的机器上对其进行测试,但看起来您必须手动将 .dll 添加到安装项目中(它不会自动执行)。让我知道这是否有帮助。
    • 不。我已经这样做了,还检查了 dll 是否实际上与已安装的服务存在于同一文件夹中。它仍然报告说找不到它们。我真的不想将所有这些 dll 复制到 System32 目录中 - 它们在那里没有业务,是我的应用程序的一部分,而不是“共享”库。关键是我必须欺骗服务以为工作文件夹是服务可执行文件所在的位置,我可以很容易地在代码中做到这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-08
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    相关资源
    最近更新 更多