我目前正在尝试将我的图像优化器应用程序移植到 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。据此,它通常意味着缺少依赖项。
然后我下载了https://github.com/lucasg/Dependencies来查看 truepng 的依赖关系:
似乎它对 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 核心应用程序查询事件日志,但这导致了以下异常:
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