Windows — Как установить все зависимые двоичные файлы, необходимые для выполнения собственных C ++ DLL / EXE на образе windowsservercore Docker

Я сталкиваюсь с проблемой при использовании родной 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

Решение

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

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector