gpt4 book ai didi

docker - 尝试将应用程序移植到 docker nanoserver 容器。运行 exe 失败,退出代码为 -1073741515(缺少依赖关系)

转载 作者:行者123 更新时间:2023-12-02 18:05:24 25 4
gpt4 key购买 nike

我目前正在尝试将我的图像优化器应用程序移植到 NanoServer docker 图像。我的图像优化器使用的工具之一是 truepng.exe。 (可以在这里下载:http://x128.ho.ua/clicks/clicks.php?uri=TruePNG_0625.zip)
我只是创建了一个 nanoserver 容器并安装了一个包含 truepng.exe 的文件夹:

docker run --rm -it -v C:\data:C:\data mcr.microsoft.com/windows/nanoserver:2004-amd64
当我现在运行 truepng.exe 时,我希望一些关于命令行参数的输出丢失:
C:\MyLocalWindowsMachine>truepng
TruePNG 0.6.2.5 : PNG Optimizer
by x128 (2010-2017)
x128@ua.fm

...
但是,当我从 nanoserver docker 容器内部调用它时,我基本上看不到输出:
C:\data>truepng

C:\data>echo %ERRORLEVEL%
-1073741515
如上所示,退出代码设置为 -1073741515。根据 this这通常意味着缺少依赖项。
然后我下载了 https://github.com/lucasg/Dependencies查看truepng的依赖项:
enter image description here
它似乎对 5 个 DLL 有一些依赖性。查找这些我发现显然有一种叫做“反向转发器”的东西: https://cloudblogs.microsoft.com/windowsserver/2015/11/16/moving-to-nano-server-the-new-deployment-option-in-windows-server-2016/
根据以下帖子,尽管它们应该已经包含在 nanoserver 中: https://social.technet.microsoft.com/Forums/en-US/5b36a6d3-84c9-4940-8b7a-9e2a38468291/reverse-forwarders-package-in-tp5?forum=NanoServer
在所有这些调查之后,我也一直在尝试将 DLL 从我的本地机器(system32)手动复制到 docker 机器,但没有任何成功(它只是不断破坏其他东西,比如需要我重新创建容器的复制命令) .接下来,我还从 SysWOW64 复制了文件,但这也无济于事。
我目前对如何进一步处理感到很困惑,因为我什至不确定该工具是否缺少依赖项或是否有其他事情发生。有没有办法在工具启动后调查缺少哪些 DLL?
亲切的问候,
德韦斯
编辑 1:来自@CherryDT 的想法
我尝试运行 gflags ( https://social.msdn.microsoft.com/Forums/en-US/f004a7e5-9024-4555-9ada-e692fbc3160d/how-to-start-quotloader-snapsquot?forum=vcgeneral ),它给出了以下输出:
C:\data>"C:\data\gflags.exe" /i TruePNG.exe +sls
Current Registry Settings for TruePNG.exe executable are: 00000000
在此之后,我尝试运行 Dbgview.exe,但这从未导致写入日志文件:
C:\data>"C:\data\DebugView\Dbgview.exe" /v /l debugview-log.txt /g /n

C:\data>
我也再次启动了 TruePNG.exe,但同样没有写入日志文件。
我尝试使用 dotnet 核心应用程序查询 EventLogs,但这导致了以下异常:
Unhandled exception. System.InvalidOperationException: Cannot open log Application on computer '.'. This function is not supported on this system.
at System.Diagnostics.EventLogInternal.OpenForRead(String currentMachineName)
at System.Diagnostics.EventLogInternal.GetEntryAtNoThrow(Int32 index)
at System.Diagnostics.EventLogEntryCollection.GetEntryAtNoThrow(Int32 index)
at System.Diagnostics.EventLogEntryCollection.EntriesEnumerator.MoveNext()
at EventLogReaderTest.ConsoleApp.Program.Main(String[] args) in C:\data\EventLogReaderTest.ConsoleApp\Program.cs:line 22

最佳答案

Windows Nano Server 很小,只有 supports 64-bit applications, tools, and agents .在这种情况下缺少的依赖是整个 x86 emulation layer (WoW64) ,因为 TruePNG 是 32 位应用程序。
Windows Server Core 包含 WoW64 和 Nano Server 中缺少的其他组件。使用 Windows Server Core image反而。
示例命令:

docker run --rm -it -v C:\Temp:C:\Temp mcr.microsoft.com/windows/servercore:2004 C:\Temp\TruePNG.exe
产生预期的输出:
TruePNG 0.6.2.5 : PNG Optimizer
by x128 (2010-2017)
x128@ua.fm

TruePNG {options} files

options:
/f# PNG delta filters 0=None, 1=Sub, 2=Up, 3=Average, 4=Paeth, 5=Mixed
/fe PNG extra filters, overrides /f switch
/i# PNG interlace method 0=None, 1=Adam7 (default input)
/g# PNG gamma 0=Remove, 1=Apply & Remove, 2=Keep (default)
[...]

关于docker - 尝试将应用程序移植到 docker nanoserver 容器。运行 exe 失败,退出代码为 -1073741515(缺少依赖关系),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63688377/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com