如何在Windows ServerCore Docker映像上安装执行本机C ++ DLL / EXE所需的所有依赖二进制文件

时间:2018-07-04 12:36:50

标签: c++ windows docker dll docker-windows

在Windowsservercore Docker容器上的C#.NET核心应用程序中使用本机C ++ DLL时遇到问题。尝试从C#.NET Core应用程序使用pInvoke从本机DLL调用公开的API时出现以下错误。

错误:无法加载DLL'MyDLL':找不到指定的模块。 (来自HRESULT的异常:0x8007007E)

问题:我的Windows docker容器(从Windowsservercore基本映像构建)具有一个在特定POST请求上运行的C#.net核心服务。我需要从本机C ++ DLL调用函数,我正在使用pInvoke调用它。现在的问题是本机DLL无法加载,因为它的某些依赖项在容器映像中丢失了。.我尝试安装可能的VC ++可再发行文件..但它不能解决问题..因此,在检查完整的依赖关系树时(使用依赖项walker )我知道Windowsservercore基本docker映像中缺少一些系统库。 以下是一些缺少的docker容器形式的libs列表。

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 docker映像中排除了。但是是否有任何标准方式/安装程序/软件包将缺少的系统库安装到我的docker映像中?还是我应该手动将所有必需的库复制到system32文件夹

PS:在安装VC ++可再发行组件之后,此相同代码可在主机(Windows Server 2016)上工作,只是在Windowsservercore Docker容器上不起作用(即使在安装提到的VC ++可再发行组件之后)。

谢谢, -严厉

1 个答案:

答案 0 :(得分:2)

就目前而言,使用当前发布的Windows Server docker映像,您无法执行依赖于上述系统库的本机二进制文件。为了在已发布的Windows Server docker容器上运行此功能,我们必须等待下一个Windows docker映像(具有较大的占用空间和更多功能可用)被发布。