2015-06-03 4 views
1

ПРИМЕЧАНИЕ. Я провел исчерпывающие исследования по этому вопросу, есть много предполагаемых решений, ни одна из которых на самом деле не работала для меня.Невозможно запустить услугу. System.IO.FileNotFoundException: Не удалось загрузить файл или сборку «assemblyname.dll»

После успешной установки службы Windows на клиентский компьютер я замечаю, что он не запускается автоматически, как предполагается. Когда я пытаюсь запустить его вручную, я получаю ошибку выше. Я просмотрел журнал событий, и здесь зарегистрирована ошибка: «Служба не может быть запущена. System.IO.FileNotFoundException: не удалось загрузить файл или сборку« assemblyname.dll »или одну из ее зависимостей. не удалось найти »

Оказалось, что мой .dll, хотя я вижу его в установочной папке (я делал бок о бок), система не может подключиться к ней. Кто-то предложил убедиться, что имя файла приложения и имя файла конфигурации совпадают, мой уже сделал, и моя служба настроена на работу в локальной учетной записи системы. ПРИМЕЧАНИЕ. Все работает отлично в блоке dev, а клиентская машина имеет требуемую 4.5 .NET-инфраструктуру для запуска службы.

ВОПРОС: Как я могу исправить это? Как я могу убедиться, что система на клиентской машине может видеть DLL-файл, который использует служба?

Любая помощь приветствуется здесь. Дайте мне знать, если потребуется дополнительное разъяснение.

Благодаря

+0

Являются исполняемыми двоичными файлами в той же папке, что и dll? Я предполагаю, что да, но я хочу проверить. – CDC

+0

@DavidW сервис был разработан на 64-битной системе, но скомпилирован для 32 бит –

+0

@CDC все в одной папке. –

ответ

1

Возможное решение

Попробуйте компиляции в x86, может быть длл 64-разрядные, убедитесь, что у вас есть 32-разрядной версии.

+0

Спасибо за сообщение @NickProzee , Я дважды проверял, какая битовая архитектура .dll, corflags сообщает мне, что на самом деле она установлена ​​в AnyCPU, поэтому это не должно быть проблемой. Спасибо за предложение. –

+0

Попробуйте положить DLL в ту же папку, что и .exe –

+0

Обычным способом отладки является просмотрщик журнала Fusion. Он расскажет вам, что он пытался загрузить и где он выглядел. Если Dll буквально находится в той же папке, что и служба exe, то Dll не соответствует требованиям клиента в AssemblyVersion, сильному имени и т. Д. Это вряд ли будет архитектура, потому что загрузка завершится неудачей с BadImageFormatException, а не «не может найти файл". Обратите внимание, что вы также, возможно, пропустили сборку, на которую зависит «assemblyname.dll». – PhilDW

1

ОК, ребята, я, наконец, решил свою проблему. Я запустил зависимый ходок, и он дал мне список DLL, которые отсутствовали, но оказалось, что они не имеют ничего общего с DLL, которую я использовал. Но я решил установить Windows SDK для Win 7 с распространяемыми ресурсами, и это решило проблему, с которой я столкнулся. Там у вас есть люди, надеюсь, что это поможет кому-то другому идти вперед. Ура!

+0

Ваши клиенты будут устанавливать SDK Windiows? – PhilDW

+0

@PhilDW Я собираюсь построить это в своем инсталляторе в качестве требования, я добавляю логику, чтобы искать его, если его там нет, я представим им заставку, на которой есть ссылка для загрузки, так же, как проверка на правильный .Net framework. –