Как установить все зависимые двоичные файлы, необходимые для выполнения собственных C ++ DLL / EXE на образе windowsservercore Docker - PullRequest
0 голосов
/ 04 июля 2018

Я столкнулся с проблемой при использовании встроенной C ++ DLL в ядре приложения C # .NET в контейнере Windowsservercore Docker. Получение следующей ошибки при попытке вызвать открытый API из собственной библиотеки DLL с помощью pInvoke из приложения C # .NET Core.

Ошибка: невозможно загрузить DLL «MyDLL»: указанный модуль не найден. (Исключение из HRESULT: 0x8007007E)

Проблема: в моем контейнере докеров Windows (сборка из базового образа windowsservercore) есть одна базовая служба C # .net, выполняющаяся .. по конкретному запросу POST. Мне нужно вызвать функцию из собственной C ++ DLL, я вызываю ее с помощью pInvoke. Теперь проблема заключается в том, что собственная DLL не загружается, потому что некоторые из ее зависимостей отсутствуют в образе контейнера. Я попытался установить возможные распространяемые файлы VC ++ ..., но это не решает проблему .. поэтому при проверке полного дерева зависимостей (с помощью обходчика зависимостей) Я узнал, что в образе базовой док-станции windowsservercore отсутствуют некоторые системные библиотеки. Ниже приведен список некоторых отсутствующих библиотек формы docker.

c:\windows\system32\ELSCORE.DLL
c:\windows\system32\DEVMGR.DLL
c:\windows\system32\DCOMP.DLL
c:\windows\system32\DSREG.DLL
c:\windows\system32\SHDOCVW.DLL
c:\windows\system32\COREUICOMPONENTS.DLL
c:\windows\system32\POLICYMANAGER.DLL
c:\windows\system32\OPENGL32.DLL

Итак, мой вопрос: как решить эти зависимости системного уровня lib от контейнера? Я понимаю, что по понятным причинам (минимизация размера изображения) эти библиотеки исключены из базового образа докера windowsservercore. Но есть ли какой-нибудь стандартный способ / установщик / пакет, который устанавливает недостающие системные библиотеки в мой образ докера? или я должен пойти с грязным вручную скопировать все необходимые библиотеки в папку system32

PS: этот же код работает на хост-машине (windows server 2016) после установки распространяемого VC ++, просто он не работает с контейнером Docker для windowsservercore (даже после установки упомянутого распространяемого VC ++).

Спасибо, -Harsh

1 Ответ

0 голосов
/ 25 июля 2018

Пока с текущими выпущенными образами окон сервера Windows вы не можете выполнять собственные двоичные файлы, которые зависят от вышеупомянутых системных библиотек. Чтобы это работало с освобожденными контейнерами-докерами Windows-сервера, нам нужно дождаться выпуска следующего образа док-станции Windows (с большим объемом и доступной функциональностью).

...