0

我有一个必须使用网络驱动器上的 dll 文件的 Windows 服务。当我连接到这个网络驱动器时,我添加了这个 dll 作为对我的 Windows 服务的引用。通过添加此 dll 文件,自动创建了另外 2 个参考文件。此服务上有一个代码,它只是从 dll 中创建一个类的实例。当我在 Visual Studio 2010 上调试此代码时,当我按 F10(Step Over)时,它会引发异常:

“由于以下错误,检索具有 CLSID {65EB3876-89FF-459F-BF24-02E8DD7F2DB2} 的组件的 COM 类工厂失败:8007007e 找不到指定的模块。(来自 HRESULT 的异常:0x8007007E)。”

我在 Windows 窗体应用程序上使用相同的 dll 和相同的代码进行测试。它没有给出错误并成功创建了一个类实例。

可能与网络驱动器的许可有关吗?

4

1 回答 1

1

Windows 服务可能在不同的凭据下运行,因此您的驱动器映射对于此帐户是不“可见的”,因此 DLL 的路径不存在。错误代码表明您正是这个问题。

服务和重定向驱动器

驱动器映射存在于登录上下文中,因此如果应用程序在 LocalService 帐户的上下文中运行,则在该上下文中运行的任何其他服务都可以访问映射的驱动器。

您需要使用 UNC 路径重新注册 DLL,或者将 DLL 复制到本地驱动器并在那里重新注册,或者将服务设置为使用与存在驱动器映射的交互式用户相同的凭据运行。

于 2012-04-02T06:51:36.920 回答