覆盖UWP中的WinSxS机制。特别是对于ComCtl32.dll

时间:2017-11-07 18:46:03

标签: uwp wkhtmltopdf comctl32

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

  

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

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

  

LdrpPreprocessDllName - INFO: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?

1 个答案:

答案 0 :(得分:0)

对于UWP, 不支持Comctl32。即使你设法把它带到"工作"它可能会在任何时间点中断 - 如果您在项目上运行Windows应用认证工具包(WACK),它将给您带来错误。

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