Снимите флажок «Включить темы времени выполнения» или удалите внутренний манифест в Delphi XE?

У меня есть компонент, который я создаю в Delphi XE, который я хочу использовать следующим образом:

  1. Пользователь создает новый пустой проект.

  2. Пользователь отбрасывает мой компонент на форме.

  3. В моем компоненте выполняется некоторый специальный код времени разработки, который изменяет параметры проекта, чтобы снять флажок «Включить темы времени выполнения» в параметрах проекта. Я не уверен, что это вообще возможно, поэтому я спрашиваю, возможно ли это.

Если №3 невозможно, то мне нужно другое решение моей проблемы «удобства использования» с этим компонентом; Проблема, с которой я столкнулся, заключается в том, что если пользователи не отключают статически связанный файл манифеста, снимая флажок Включить темы времени выполнения, то этот статически сгенерированный манифест, связанный с EXE, по-видимому, переопределяет внешние файлы манифеста, которые я хочу иметь вне EXE, на диск. Мне также нужно изменить эти манифесты во время выполнения, поэтому необходимы внешние манифесты. Я, конечно, могу включить функциональность Темы выполнения, используя эти манифесты, когда это желательно. Второстепенный вопрос - о приоритете внешних и внутренних проявлений; Может ли внешний манифест каким-либо образом иметь приоритет над внутренним ресурсом манифеста, который связан с приложениями Delphi, когда вы устанавливаете флажок «Включить темы времени выполнения»?

Допустимые решения, кроме # 3:

A. Как-то заставить Delphi не генерировать манифест. B. Каким-то образом во время выполнения заставить Windows распознавать внешние файлы .manifest и назначать им приоритеты, даже если обнаружен внутренний.

C. Наименее хорошее решение; Во время выполнения, после сбоя CoCreateInstance в моем компоненте, я могу перечислить ресурсы, сообщить, что внешний манифест присутствует и мешает нам, и полагаться на разработчиков, которые используют мой компонент, читая сообщения об ошибках во время выполнения, мой компонент выплевывает, говоря им отключить установите флажок темы времени выполнения и пересоберите их приложение. Извлечение и чтение манифеста уже описано в другом вопросе о переполнении стека здесь с кодом C ++, который можно легко преобразовать в Delphi.

Обновление Принятый ответ делает именно то, что я спросил, но считается взлом, и ответ Дэвида о контекстах активации гораздо более разумен и является рекомендуемым подходом.

Update2 Встроенныйв манифесте обычно переопределяется в более поздних версиях Delphi (XE5 и новее) путем явного указания, какой манифест вы хотите связать, через настройки проекта.

9
задан Community 23 May 2017 в 11:51
поделиться