Не удалось найти файл сборки «example.dll» при запуске службы Windows

Я разработал службу WCF, которая использует привязку net.tcp и файлы чтения и записи в файловую систему. Когда я запускаю службу Windows (в консоли), я получаю следующую ошибку, даже если sample.dll находится в папке:

Не удалось найти файл сборки sample.dll

Эта конкретная служба WCF размещена в службе Windows, которая работает в 64-разрядной версии Windows 7, и у меня есть следующие вопросы:

Какую учетную запись я должен использовать для своего приложения:

Пользователь / NetworkService / LocalSystem / LocalService

И почему ОС не может загрузить dll, даже если она есть?

Заранее спасибо за вашу помощь!


person Daniel Gartmann    schedule 25.05.2012    source источник
comment
Я предполагаю, что ваша проблема заключается в следующем: по умолчанию текущий каталог службы Windows находится в windows/system32. Поэтому попробуйте переместить свою dll в этот каталог и снова запустить службу.   -  person Renatas M.    schedule 25.05.2012
comment
Спасибо за совет, но он не решает проблему.   -  person Daniel Gartmann    schedule 25.05.2012
comment
Это точное сообщение об исключении? Можете ли вы опубликовать более подробную информацию?   -  person Renatas M.    schedule 25.05.2012
comment
Когда я размещаю свою службу WCF в консоли, она отлично работает, клиенты могут подключаться к серверу и могут получать данные, передаваемые сервером через обратные вызовы, но проблема заключается в том, что я размещаю ее в службе Windows. Сервис состоит из нескольких dll и exe + файл настроек. Я думаю, что проблема связана с учетными данными учетной записи службы... служба не может видеть dll, потому что ему не разрешено читать с места (в настоящее время на моем рабочем столе). Я не получаю никаких исключений.   -  person Daniel Gartmann    schedule 25.05.2012
comment
На данный момент я использую учетную запись пользователя для службы Windows, но я не уверен, что она правильная?   -  person Daniel Gartmann    schedule 25.05.2012
comment
Вы должны получить исключение. Вы смотрели на просмотр событий? Вы пытались поймать исключение и зарегистрировать его? Если вы поймаете это, вы будете знать проблему. Теперь вы просто пытаетесь угадать. Также переместите файл pdb с помощью exe, тогда вы сможете получить более подробное исключение.   -  person Renatas M.    schedule 25.05.2012


Ответы (2)


Для dll вы должны добавить следующую строку кода прямо в начало метода OnStart.

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

Это должно позволить вашей службе загружать DLL из фактического каталога.

person Tojamismis    schedule 15.08.2012
comment
Хороший звонок - спас меня от некоторых страданий! - person Brian Wells; 25.01.2014

Согласно документации MSDN в ServiceAccount член User запрашивает имя пользователя и пароль. Я предполагаю, что если вы используете учетную запись пользователя и у нее нет разрешений на чтение для windows/system32, это приведет к тому, что ваша сборка не будет найдена.

Возможно, изменить ServiceAccount на шаг вверх на LocalService?

person Whit Waldo    schedule 28.05.2012