2012-03-30 3 views
0

У меня есть служба Windows, которая должна использовать DLL-файл на сетевом диске. Когда я был подключен к этому сетевому диску, я добавил эту DLL в качестве ссылки на мою Windows-службу. Автоматически было добавлено еще 2 файла ссылки, добавив этот DLL-файл. В этой службе есть код, который просто создает экземпляр класса из dll. Хотя я отлаживаю этот код в Visual Studio 2010, когда я нажимаю F10 (Step Over), он выдает исключение:Служба Windows и Dll на сетевом диске

«Получение фабрики COM-класса для компонента с CLSID {65EB3876-89FF-459F-BF24-02E8DD7F2DB2} не удалось из-за следующей ошибки: 8007007e Указанный модуль не найден. (Исключение из HRESULT: 0x8007007E). "

Я использую те же DLL и те же коды в приложении Windows Forms для тестирования. Он не дает ошибок и создает экземпляр класса успешно.

Может быть, это связано с разрешением на сетевой диск?

+0

Зарегистрировано ли CLSID? Найдите в нем реестр. Либо сетевая dll является COM-объектом, который необходимо зарегистрировать, либо ссылается на объект COM, который необходимо зарегистрировать. –

+0

@Samuel Neff Я искал regedit для «65EB3876-89FF-459F-BF24-02E8DD7F2DB2». Да, он зарегистрирован. Нужно ли регистрировать другие две ссылки, которые были автоматически добавлены, когда я добавил DLL на сетевой диск в качестве ссылки? – caranhithion

+0

Зарегистрировано ли оно с использованием UNC-пути или с помощью сопоставленной буквы диска? –

ответ

1

Служба Windows может работать под разными учетными данными, поэтому ваши сопоставления дисков не являются «видимыми» для этой учетной записи, поэтому путь к DLL не существует. Код ошибки указывает на эту проблему.

Services and Redirected Drives:

Drive mappings exist across logon contexts, so if an application is running in the context of the LocalService account, then any other service running in that context may have access to the mapped drive.

Вам нужно повторно зарегистрировать DLL с помощью UNC-путь, или скопировать DLL в локальный диск и повторно зарегистрироваться там, или набор услуг для работы с теми же учетными данными, как интерактивный usre Дисковые сопоставления существуют для.

+0

Я пытался перерегистрировать DLL, используя UNC-путь, но он не работает. Тем не менее «Указанный модуль не найден». исключение. – caranhithion

+0

Хороший улов, я согласился с тем, что служба, работающая как пользователь, не имеющий доступа к сети, является наиболее вероятной проблемой. –

Смежные вопросы