【问题标题】:Unable to find assembly file 'example.dll' while starting windows service启动 Windows 服务时找不到程序集文件“example.dll”
【发布时间】:2012-05-25 12:10:13
【问题描述】:

我开发了一个 WCF 服务,它使用 net.tcp 绑定和 readwrite 文件到文件系统。当我启动 Windows 服务(在控制台中)时,即使 sample.dll 在文件夹中,我也会收到以下错误:

找不到程序集文件 sample.dll

这个特定的 WCF 服务托管在 Windows 服务中,该服务在 Windows 7 64 位上运行,我有以下问题:

我的应用程序应该使用哪个帐户:

用户/网络服务/本地系统/本地服务

为什么即使有dll,操作系统也无法加载?

提前感谢您的帮助!

【问题讨论】:

  • 我猜你的问题是这样的:默认情况下,windows服务当前目录在windows/system32中。所以尝试将你的 dll 移动到该目录并尝试再次启动服务。
  • 感谢您的建议,但这并不能解决问题。
  • 这是确切的所有例外信息吗?你能发布更多细节吗?
  • 当我在控制台中托管我的 WCF 服务时,它工作得非常好,客户端能够连接到服务器并能够通过回调获取服务器推送的数据,但问题是当我托管时它在Windows服务中。该服务由多个 dll 和 exe + 设置文件组成。我认为问题来自服务“帐户”的凭据......服务看不到 dll,因为不允许他从该位置读取(当前在我的桌面上)。我没有任何例外。
  • 目前我正在使用 Windows 服务的“用户”帐户,但我不确定它是否正确?

标签: c# windows wcf windows-services net.tcp


【解决方案1】:

对于 dll,您应该在 OnStart 方法的开头添加以下代码行。

 System.Environment.CurrentDirectory = System.AppDomain.CurrentDomain.BaseDirectory

这应该允许您的服务从实际目录加载 dll。

【讨论】:

  • 不错的电话 - 让我免于痛苦!
【解决方案2】:

根据ServiceAccount 上的MSDN documentation,User 成员提示输入用户名和密码。我猜如果您使用的是用户帐户并且它没有 windows/system32 的读取权限,那将导致无法找到您的程序集。

也许将 ServiceAccount 上一步更改为 LocalService?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-20
    • 1970-01-01
    • 1970-01-01
    • 2014-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-22
    相关资源
    最近更新 更多