繁体   English   中英

覆盖UWP中的WinSxS机制。 专门用于ComCtl32.dll

[英]Override WinSxS mechanism in UWP. Specifically for ComCtl32.dll

我正在创建一个使用动态库(wkhtmltopdf)的通用Windows应用程序,该库似乎通过其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?

COMCTL32是不是在所有的UWP支持。 即使您设法使其“正常运行”,它也可能在任何时候中断--如果在项目上运行Windows App认证工具包(WACK),它将给您带来错误。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM