powered by simpleCommunicator - 2.0.41     © 2025 Programmizd 02
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / WCF: как загрузить unmanaged dll?
12 сообщений из 12, страница 1 из 1
WCF: как загрузить unmanaged dll?
    #38088799
Winnipuh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ситуация:

есть WCF 64 бит, он внутри использует функцию с загрузкой неменеджед длл

[DllImport("mydll")]
...

Все хорошо, когда я пускаю WCF из-под консольного хоста.
Но когда тот же сервис пускаю на том же компьютере как веб аппликацию из-под IIS пишет, что

авторCan not create ttt Unable to load DLL 'Editor.dll': The specified module could not be found. (Exception from HRESULT: 0x8007007E) File : Ln 0


Я подозреваю, что DllImport указывает искать длл в текущей директории, и в случае IIS она не та, где лежат файлы веб аппликации.

Как правильно решить проблему?
...
Рейтинг: 0 / 0
WCF: как загрузить unmanaged dll?
    #38088848
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну... Можно путь "конкретный" задать... Dynamic-Link Library Search Order
...
Рейтинг: 0 / 0
WCF: как загрузить unmanaged dll?
    #38088887
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Winnipuh,

скорее всего он пытается найти DLL-ку в папке Temporary ASP.NET Files куда содержимое папки bin автоматически копируется. Нужно положить DLL в папку входящую в PATH или дать подсказку с помощью функции SetDllDirectory.
...
Рейтинг: 0 / 0
WCF: как загрузить unmanaged dll?
    #38089066
Winnipuh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bazileWinnipuh,

скорее всего он пытается найти DLL-ку в папке Temporary ASP.NET Files куда содержимое папки bin автоматически копируется. Нужно положить DLL в папку входящую в PATH или дать подсказку с помощью функции SetDllDirectory.

Спасибо.

Проблема в том, что веб апп ставится инсталлером и юзер может выбрать имя, а следовательно виртуальный фолдер, куда ставить.
Т.е. в конце концов конкретный путь будет известен после реальной инсталляции.

В каком месте лучше вызывать эту функцию: SetDllDirectory?
...
Рейтинг: 0 / 0
WCF: как загрузить unmanaged dll?
    #38089086
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Winnipuh,

можно в global.asax, можно в статческом конструкторе твоего сервиса. Путь к bin папке можно узнать через HostingEnvironment.ApplicationPhysicalPath или рефлексию поэтому твой код без проблем подстроится под конкретную среду.
...
Рейтинг: 0 / 0
WCF: как загрузить unmanaged dll?
    #38091998
Winnipuh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bazileWinnipuh,

скорее всего он пытается найти DLL-ку в папке Temporary ASP.NET Files куда содержимое папки bin автоматически копируется. Нужно положить DLL в папку входящую в PATH или дать подсказку с помощью функции SetDllDirectory.

кстати, но эти длл лежат в bin, они по идее тоже должны копировать? тогда почему ассембли их не находит?
...
Рейтинг: 0 / 0
WCF: как загрузить unmanaged dll?
    #38092264
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Winnipuh,

не должен. Копируются только .NET сборки. Неуправляемые dll к ним, очевидно, не относятся.
...
Рейтинг: 0 / 0
WCF: как загрузить unmanaged dll?
    #38092308
Winnipuh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bazileWinnipuh,

не должен. Копируются только .NET сборки. Неуправляемые dll к ним, очевидно, не относятся.

аааааааа! вот теперь прояснилось...

Я вот что подумал, кстати, а можно ли упаковать эти неменеджед длл скажем в ресурсы ассембли, и каким-то образом их подгружать? Типа того, как это можно сделать с ассемблями
...
Рейтинг: 0 / 0
WCF: как загрузить unmanaged dll?
    #38092353
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно вообще моск не есть... А попробовать таки переменные окружения...? Ну или сделать COM обертку и горя не знать :) На сколько я понял, Вы хотите развертывания простым копированием...? Может просто переделать сетуп...? Последнее Ваше озарение из серии "стоя и в гамаке"
...
Рейтинг: 0 / 0
WCF: как загрузить unmanaged dll?
    #38092435
Winnipuh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buserМожно вообще моск не есть... А попробовать таки переменные окружения...? Ну или сделать COM обертку и горя не знать :) На сколько я понял, Вы хотите развертывания простым копированием...? Может просто переделать сетуп...? Последнее Ваше озарение из серии "стоя и в гамаке"

у меня инсталлер ставит сервис, юзер выбирает имя и соответственно фолдер.
Через переменные окружения попробую, их надо будет исправлять в процессе инсталляции...
но хочется чтобы красивое решение
...
Рейтинг: 0 / 0
WCF: как загрузить unmanaged dll?
    #38098707
Winnipuh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проверил:

Код: c#
1.
2.
3.
1.  
string strPathToBin = HostingEnvironment.ApplicationPhysicalPath + @"bin\";
bool bSet = SetDllDirectory(strPathToBin);




не работает.


2. добавил вручную явно в пути PATH путь к бину - та же ошибка....

что еще может быть?

зы. там набор неменеджед дллей, которые вызывают одна другую внутри...
...
Рейтинг: 0 / 0
WCF: как загрузить unmanaged dll?
    #38098741
Winnipuh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
все работает, спасибо!
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / WCF: как загрузить unmanaged dll?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]