我有一个必须在网络驱动器上使用dll文件的Windows服务。当我连接到此网络驱动器时,我添加了此dll作为我的Windows服务的参考。通过添加此dll文件自动创建了2个参考文件。这个服务上有一个代码,它只是从dll创建一个类的实例。当我在Visual Studio 2010上调试此代码时,当我按F10(Step Over)时,它会引发异常:
“由于以下错误,检索具有CLSID {65EB3876-89FF-459F-BF24-02E8DD7F2DB2}的组件的COM类工厂失败:8007007e找不到指定的模块。(HRESULT异常:0x8007007E)。”< / p>
我在Windows窗体应用程序上使用相同的dll和相同的代码进行测试。它没有错误,并且成功创建了一个类实例。
是否与网络驱动器的权限有关?
答案 0 :(得分:1)
Windows服务可能在不同的凭据下运行,因此此帐户的驱动器映射不是“可见的”,因此DLL的路径不存在。错误代码表明您正是这个问题。
Services and Redirected Drives:
在登录上下文中存在驱动器映射,因此如果应用程序是 在LocalService帐户的上下文中运行,然后运行任何其他帐户 在该上下文中运行的服务可以访问映射的驱动器。
您需要使用UNC路径重新注册DLL,或者将DLL复制到本地驱动器并在那里重新注册,或者将服务设置为使用与交互式相同的凭据运行,而不管是否存在驱动器映射。