Как предотвратить использование встроенного манифеста?
Я работаю над многими приложениями, использующими RegFree COM Activation, все работает хорошо, за исключением того, что одно из приложений запускается с использованием более старой технологии, которая использует компилятор JIT-типа.
Чтобы заставить RegFree COM работать, я должен предоставить манифест запускающему исполняемому файлу (поправьте меня, если я ошибаюсь) со списком моих зависимостей. Все остальные мои приложения построены внутри компании, и у меня есть полный контроль над моим манифестом (авторинг, и если я его внедряю, если я оставляю его бок о бок и т. Д.) Но этот JIT-компилятор (аля Java JRE) не мой, и он уже содержит (встроенный) манифест.
Я извлек манифест (используя MT с -inputresource и -outfile), изменил его и заново внедрил. Это работает как ожидалось. Однако, не имея права собственности на этот исполняемый файл, я беспокоюсь о законности такой манипуляции (изменение исполняемого файла третьей стороны и ее перераспределение!) И хотел бы избежать необходимости делать такую вещь. Кроме того, я обеспокоен тем, что в какой-то момент этот исполняемый файл может быть подписан третьей стороной, и, таким образом, изменение встроенного манифеста может сломать подпись.
Есть ли способ заставить sxs-загрузчик сначала искать другой манифест? Кажется, что если он находит один встроенный, он принимает его по умолчанию (что в большинстве случаев хорошо). Могу ли я предоставить файл конфигурации или что-нибудь, что могло бы пропустить встроенный манифест и перейти к моему параллельному файлу (myExe.exe.manifest, вместо ресурса RT_MANIFEST внутри myExe.exe)?
1 ответ
Насколько я знаю, вы можете использовать эту систему в масштабе всей системы. Добавьте это в реестр:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\SideBySide]
"PreferExternalManifest"=dword:00000001
Обязательно отключите кэш контекста активации, обновив дату последнего изменения в исполняемом файле, иначе изменения в манифесте не будут приняты (переименование и переименование обратно, похоже, работает).
В Win XP внешний манифест предпочтительнее внутреннего, но начиная с Windows Server 2003 с пакетом обновления 1 (SP1) они изменили его на противоположный.