根据Microsoft的documentation,当应用程序具有清单时,.local
重定向被禁用。但是我观察到,即使EXE文件具有嵌入式清单,如果应用程序目录中有文件夹<exe name>.exe.local
,重定向仍然适用。
例如,这是foo.exe
的嵌入式清单:
<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level='asInvoker' uiAccess='false' />
</requestedPrivileges>
</security>
</trustInfo>
<dependency>
<dependentAssembly>
<assemblyIdentity type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*' />
</dependentAssembly>
</dependency>
</assembly>
如果我在应用程序目录中放置一个文件夹foo.exe.local
,则Windows尝试从comctl32.dll
而不是foo.exe.local\amd64_microsoft.windows.common-controls_6595b64144ccf1df_6.0.17763.437_none_05b63dca071e5dd6\comctl32.dll
下的文件夹中加载C:\Windows\WinSxS
。
我在Windows 10 x64版本10.0.17763.437和带有最新补丁的Windows 7 x86上对此进行了测试。
那么为什么仍然遵循.local
重定向?如何更改清单以完全禁用.local
?
答案 0 :(得分:2)
我也观察到了相同的行为。我想知道是否有人知道如何禁用Windows .local(“ dotLocal”)重定向-我相信这是WinSxS并行加载的副作用。
我已经在Windows 10 x64版本10.0.17763.503上进行了测试。
请注意,我发现我可以使用清单中未记录的“ loadFrom ”功能来强制COMCTL32.DLL从\ Windows \ System32目录加载。但是,这仅在可执行文件不需要视觉样式并且可以使用COMCTL32 5.x版时起作用。
https://3-edge-chat.facebook.com/pull?channel=p_{senderID}&clientid={clientID}&msgs_recv=0&sticky_token={token}&sticky_pool=r{pool}&state=active