c++ - 如何安装在 windowsservercore Docker 镜像上执行 native C++ DLL/EXE 所需的所有依赖二进制文件

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

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

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

问题:我的 Windows docker 容器(从 windowsservercore 基础镜像构建)有一个 C# .net core 服务在特定的 POST 请求上运行..我需要从 native C++ DLL 调用函数,我使用 pInvoke 调用它。现在的问题是 native DLL 未加载,因为容器镜像中缺少它的一些依赖项。我尝试安装可能的 VC++ 可再发行组件。但它不能解决问题。所以在检查完整的依赖项树时(使用依赖项遍历器) )我发现 windowsservercore 基础 docker 镜像中缺少一些系统库。 以下是 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

所以我的问题是,如何解决容器上的系统级库依赖关系?据我所知,出于明显的原因(最小化图像大小),这些库被排除在基本 windowsservercore docker 图像之外。但是是否有任何标准方法/安装程序/包将缺少的系统库安装到我的 docker 镜像中?或者我应该手动将所有必需的库复制到 system32 文件夹

PS:安装 VC++ 可再发行组件后,相同的代码可以在主机(Windows Server 2016)上运行,只是它不能在 windowsservercore Docker 容器上运行(即使在安装了提到的 VC++ 可再发行组件之后)。

谢谢, -严酷

最佳答案

目前,使用当前发布的 Windows 服务器 docker 镜像,您无法执行依赖于上述系统库的 native 二进制文件。为了使其能够在已发布的 Windows 服务器 docker 容器上运行,我们必须等待下一个 Windows docker 镜像(占用空间大且可用的功能更多)的发布。

关于c++ - 如何安装在 windowsservercore Docker 镜像上执行 native C++ DLL/EXE 所需的所有依赖二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51173889/

相关文章:

postgresql - 在Docker容器中替换postgresql.conf

C++ 显示一组随机的六个数字

c++ - 如何知道函数何时必须是虚拟的?

windows - 如何将 Windows 上的 Rails/Rspec 加载时间优化到秒级? (带或不带叉)

java - Windows 上非常奇怪的 FileOutputStream 行为

mysql - Docker-Compose:为什么我的 Rails 图像在访问 MySQL 数据库时存在权限问题?

Docker 网络和 VLAN

c++ - clang ASTContext.getParents 总是返回一个空列表

c++ - 除以 1000 对 double var 进行四舍五入并失去小数位

C# - 如何检测 Windows 关闭/注销并取消该操作(询问用户后)