为什么即使exe有清单,也应用DotLocal重定向

时间:2019-04-13 17:33:38

标签: windows dll manifest

根据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

1 个答案:

答案 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