В соответствии с документацией Microsoft , перенаправление .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 с последними исправлениями.
Так почему же все еще следует перенаправление * 1019? Как изменить манифест, чтобы полностью отключить .local
? 1021 *