0

我正在创建一个通用 Windows 应用程序,它使用一个动态库 (wkhtmltopdf),它似乎通过其 Qt 实现依赖于 comctl32.dll。现在,我可以在我的开发机器(Windows 10 Pro 1607 Build 14393.1770)上正常运行该应用程序,但是,在目标机器(Windows 10 Enterprise 2015 LTSB)上,我收到以下错误:

LdrpInitializeNode - 错误:DLL“C:\Windows\WinSxS\x86_microsoft.windows.common-controls_6595b64144ccf1df_5.82.10240.16384_none_49c02355cf03478c\COMCTL32.dll”的初始化例程 67ABDD60 在 DLL_PROCESS_ATTACH 期间失败

运行应用程序时,我注意到我的开发机器有不同版本的这个库(5.82.14393.447)。我知道 comctl32.dll 6.0 是不可再分发的,但我没有看到 5.82 的相同评论。我仍然决定打包我的库版本并LoadPackagedLibrary手动调用。这在我的开发机器上最终加载了两个版本(如 Visual Studio 模块窗口中所示);在我的目标机器上,它加载了“较新”版本,但仍尝试在 WinSxS 上加载该版本,但仍然发生故障:

LdrpPreprocessDllName - 信息:DLL COMCTL32.dll 被 SxS 重定向到 C:\Windows\WinSxS\x86_microsoft.windows.common-controls_6595b64144ccf1df_5.82.10240.16384_none_49c02355cf03478c\COMCTL32.dll

看来我只需要让 WinSxS加载它的 ComCtl32.dll 版本,因为我通过用C:\Windows\WinSxS\x86_microsoft.windows.common-controls_6595b64144ccf1df_5.82.10240.16384_none_49c02355cf03478c\COMCTL32.dll我的库版本替换目标机器来破解。然而,这是不希望的。

有没有办法重新分发 ComCtl32.dll 的工作版本,这样它就不会尝试从 WinSxS 加载它?也许通过清单文件或在目标机器上运行 MSI?

4

1 回答 1

0

UWP根本不支持 Comctl32 。即使你设法让它“工作”,它也可能在任何时候中断——如果你在你的项目上运行 Windows 应用程序认证工具包 (WACK),它会给你错误。

我很确定 UWP 也禁用了 Fusion(支持绑定到不同 DLL 版本的东西)。由于应用程序是自包含的,并且不会像旧版应用程序那样安装/共享系统库,因此不需要绑定重定向。

于 2017-11-30T08:29:21.897 回答