我正在创建一个通用Windows应用程序,它使用一个动态库(wkhtmltopdf),该库似乎通过其Qt实现依赖于comctl32.dll。现在,我可以在我的开发机器(Windows10Pro1607Build 14393.1770)上很好地运行该应用程序,但是,在目标计算机(Windows10Enterprise2015LTSB)上,我得到以下错误:
错误: Init例程67ABDD60用于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。这将在我的dev机器上加载两个版本(如窗口中所示);在目标计算机上,它加载“更新”版本,但仍然尝试加载WinSxS上的版本,并且仍然会发生故障:
DLL - INFO: DLL COMCTL32.dll被C:\Windows\WinSxS\x86_microsoft.windows.common-controls_6595b64144ccf1df_5.82.10240.16384_none_49c02355cf03478c\COMCTL32.dll重定向到SxS
看来我确实需要让WinSxS 而不是加载它的ComCtl32.dll版本,因为我用库的版本替换了目标机器中的C:\Windows\WinSxS\x86_microsoft.windows.common-controls_6595b64144ccf1df_5.82.10240.16384_none_49c02355cf03478c\COMCTL32.dll。然而,这是不可取的。
是否有一种方法可以重新分发ComCtl32.dll的工作版本,这样它就不会尝试从WinSxS加载它?可能是通过清单文件,还是通过在目标计算机上运行MSI?
发布于 2017-11-30 08:29:21
对于UWP,Comctl32完全不支持。即使你设法让它“工作”,它可能在任何时间点崩溃--如果你在你的项目上运行(WACK),它会给你带来错误。
我非常肯定,对于UWP来说,融合(支持绑定到不同的DLL版本)也是禁用的。由于应用程序是独立的,并且不像遗留应用程序那样安装/共享系统库,所以不需要绑定重定向。
https://stackoverflow.com/questions/47165322
复制相似问题