listary加载的通用控件的版本错误
Listary会将其加载到系统上的所有进程中,这是预料之中的。但是它加载了错误版本的Common Controls(comctl32.dll)库。
我的程序不静态地依赖comctl32.dll。
因此,启动后将不会加载任何版本的通用控件。
该程序创建并激活一个激活上下文,该激活上下文在其中指定了6.0版的通用控件。
然后,它调用LoadLibrary(“ comctl32.dll”)并加载通用控件的版本6。
过一会儿,Listary的ListaryHook.dll被加载后,它静态地依赖于comctl32.dll。
但是,默认版本的通用控件(5.82)已加载到该过程中。这不好。
这与使用ISOLATION_AWARE_ENABLED或延迟加载的DLL编译应用程序的情况相同。
这是不好的,有多种原因。
现在,有两个版本的Common Controls(comctl32.dll)库同时加载到进程中。因此,GetModuleHandle函数可能会返回意外结果。
应用程序的一部分可能以现代外观呈现,而其他部分则具有旧外观。
Listary不尊重应用程序作者及其意图,这会破坏应用程序。
原因是在ListaryHook.dll(和ListaryHook64.dll)清单中。DLL的资源中有ID为2的清单,该清单将覆盖当前处于活动状态的激活上下文。
解决方案是从ListaryHook.dll中删除清单(资源ID 2),并将Listary功能设计为可与Common Controls的任一版本(v5.82或v6.0)一起正常使用。
Windows 7 x64。列表版本5.00.2843,安装程序于2017-10-14进行了数字签名。