Служба Windows и Dll на сетевом диске

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

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

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

Может ли это быть что-то связанное с разрешением для сетевого диска?


person caranhithion    schedule 30.03.2012    source источник
comment
Этот CLSID зарегистрирован? Найдите его в реестре. Либо сетевая dll является COM-объектом, который необходимо зарегистрировать, либо ссылается на COM-объект, который необходимо зарегистрировать.   -  person Samuel Neff    schedule 30.03.2012
comment
@Samuel Neff Я искал в regedit 65EB3876-89FF-459F-BF24-02E8DD7F2DB2. Да, зарегистрирован. Нужно ли мне регистрировать две другие ссылки, которые были автоматически добавлены, когда я добавил dll на сетевой диск в качестве ссылки?   -  person caranhithion    schedule 30.03.2012
comment
Он зарегистрирован с использованием пути UNC или с помощью сопоставленной буквы диска?   -  person Roman R.    schedule 01.04.2012
comment
@РоманР. он зарегистрирован через сопоставленную букву диска.   -  person caranhithion    schedule 02.04.2012


Ответы (1)


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

Службы и перенаправленные диски:

Сопоставления дисков существуют в контексте входа в систему, поэтому, если приложение работает в контексте учетной записи LocalService, любая другая служба, работающая в этом контексте, может иметь доступ к сопоставленному диску.

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

person Roman R.    schedule 02.04.2012
comment
Я попытался перерегистрировать DLL, используя UNC-путь, но это не сработало. Тем не менее указанный модуль не найден. исключение. - person caranhithion; 10.04.2012
comment
Хороший улов, я согласился с тем, что служба, работающая от имени пользователя, не имеющего доступа к сети, является наиболее вероятной проблемой. - person Samuel Neff; 11.04.2012