【问题标题】:Service cannot be started. System.IO.FileNotFoundException: Could not load file or assembly "assemblyname.dll"无法启动服务。 System.IO.FileNotFoundException:无法加载文件或程序集“assemblyname.dll”
【发布时间】:2015-06-03 18:40:26
【问题描述】:

注意:我已经对这个问题进行了详尽的研究,有很多假设的解决方案,但没有一个对我真正有用。

在客户端计算机上成功安装 Windows 服务后,我注意到它没有按预期自动启动。当我尝试手动启动它时,出现上述错误。我查看了事件查看器日志,这是那里记录的错误:“服务无法启动。System.IO.FileNotFoundException:无法加载文件或程序集“assemblyname.dll”或其依赖项之一。指定的模块找不到”

原来我的.dll,虽然我可以在安装文件夹中看到它(我做了并排),但系统无法连接到它。有人建议确保应用程序文件名和配置文件名匹配,我的已经这样做了,并且我的服务设置为在本地系统帐户上运行。注意:在开发盒上一切正常,客户端机器具有运行服务所必需的 4.5 .NET 框架。

问题:我该如何纠正这个问题?如何确保客户端计算机上的系统能够看到服务使用的 .dll 文件?

感谢您的帮助。如果需要进一步澄清,请告诉我。

谢谢

【问题讨论】:

  • 可执行二进制文件是否与 dll 位于同一文件夹中?我假设是的,但我想验证一下。
  • @DavidW 该服务是在 64 位系统上开发的,但编译为 32 位
  • @CDC 一切都在同一个文件夹中。
  • 在这种情况下,ProcMon 是你的朋友。启动它,启动服务,ProcMon 应该准确地告诉你哪个程序集是 MIA。
  • 事件查看器的日志已经指定了丢失的.dll,我的问题是如何确保客户端系统可以看到.dll。它在安装文件夹中,但系统说它丢失了。

标签: c# .net wcf windows-services setup-project


【解决方案1】:

可能的解决方案

尝试用 x86 编译,可能是 64 位的 dll,确保你有 32 位的版本。

【讨论】:

  • 感谢@NickProzee 的帖子,我确实仔细检查了 .dll 是什么位架构,corflags 告诉我它实际上设置为 AnyCPU,所以这应该不是问题。不过感谢您的建议。
  • 尝试将dll与.exe放在同一个文件夹中
  • 调试这些的常用方法是 Fusion Log Viewer。它会告诉你它试图加载什么以及它在哪里。如果 Dll 实际上与服务 exe 位于同一文件夹中,则 Dll 与 AssemblyVersion、强名称等中的客户端要求不匹配。它不太可能是体系结构,因为加载会因 BadImageFormatException 而失败,而不是“找不到文件”。请注意,您也可能错过了“assemblyname.dll”所依赖的程序集。
  • @PhilDW 感谢您的回复,您能否指导我如何检查客户端 AssemblyVersion 要求是否与我正在使用的 DLL 匹配?到目前为止,我确实使用 corflags 来检查 DLL 的位体系结构,并将其设置为 AnyCPU。客户端系统是 32 位机器。我还能做哪些其他检查?你的回答似乎更接近我的问题。
  • 你是 .NET,所以你的 exe 在构建中引用了一个 Dll。构建将该 exe 绑定到该 Dll 的确切版本。这个非常基本的东西 - .NET 不仅关心名称 - 程序集版本必须匹配,以及语言等。例如,如果您的程序集版本中有 * 则您的版本是不可预测的,并且如果您以错误的顺序构建( DLL 之前的客户端)并且您保证不匹配。
【解决方案2】:

好的,伙计们,我终于解决了我的问题。我运行了dependency walker,它给了我一个丢失的dll列表,但事实证明它们与我使用的dll无关。但是我决定使用可再发行组件安装 Windows SDK for Win 7,这解决了我遇到的问题。好了,伙计们,希望这可以帮助其他人前进。干杯!

【讨论】:

  • 您会为您的客户安装 Windows SDK 吗?
  • @PhilDW 我将根据要求将其构建到我的安装程序中,我正在添加逻辑来查找它,如果它不存在,我将向他们展示一个包含下载的启动画面链接,就像检查正确的 .Net 框架一样。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-28
  • 1970-01-01
  • 2023-02-07
相关资源
最近更新 更多