Как программно предотвратить появление помощника по совместимости программ в Vista (и Windows 7)?

Я разрабатываю программу на C ++, которая может использовать Adobe Flash, хотя это не обязательно.
Я использую CoCreateInstance для создания объекта flash, и если он не работает, я знаю, что flash не установлен, поэтому я его не использую.
Однако в Vista (и я думаю, что и в Windows 7), когда флэш-память не установлена, после выхода из приложения «Помощник по совместимости программ» выдает сообщение о том, что «этой программе требуется отсутствующий компонент Windows» с указанием флэш-памяти. .ocx.

Есть ли способ предотвратить появление этого сообщения? Я не хочу заставлять пользователей устанавливать флеш-память (тем более, что это IE ActiveX, а у пользователей FireFox она может не быть установлена), и мое приложение может нормально работать без флеш-памяти.
Плюс это сообщение действительно раздражает, когда он появляется после каждого запуска.
Я, конечно, не имею в виду отключение PCA на компьютере пользователя, но программно отключите этот конкретный вид на всех машинах.

Есть мысли?
Спасибо

[РЕДАКТИРОВАТЬ:]

Я последовал примеру Шэя (спасибо) и продолжил копать самостоятельно. Я добавил в манифест приложения следующий XML-код:

<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
  <security>
    <requestedPrivileges>
      <requestedExecutionLevel level="asInvoker" uiAccess="false">
      </requestedExecutionLevel>
   </requestedPrivileges>
  </security>
</trustInfo>

(см. также: msdn.microsoft.com/en-us/library/bb756929. aspx)
Это решило проблему в Vista 64.

Чтобы решить ту же проблему в Windows 7, я добавил следующее:

<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
  <application>
    <!--The ID below indicates application support for Windows Vista -->
    <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
    <!--The ID below indicates application support for Windows 7 -->
    <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
  </application>
</compatibility>

(См. Также: blogs.msdn.com/yvesdolc/archive/2009/09/22/the-new-compatibility-section-in-the-application-manifest.aspx)

Решенный Windows 7.

Но почему-то это все еще происходит в Vista 32 ...

Я также попытался отредактировать манифест конкретной библиотеки DLL, которая вызывает проблему, но это не помогло. Только сам исполняемый файл повлиял на проблему.

Итак ... Vista 32?


person Asaf    schedule 19.10.2009    source источник


Ответы (1)


Фрагмент из здесь (обсуждает настройку, но имеет отношение к ваш случай)

Как я могу отказаться от Помощника по совместимости программ для моей настройки?

Чтобы предотвратить появление помощника по совместимости программ, необходимо включить встроенный манифест, в котором указывается запрошенный уровень выполнения для исполняемого файла установки. Если вы заключите исполняемый файл установки в самораспаковывающийся пакет, вы также должны включить встроенный манифест в самораспаковывающийся пакет. Как только вы это сделаете, Windows Vista будет рассматривать вашу установку как Windows Vista и больше не будет отображать диалоговое окно PCA при выходе из программы установки после сбоя или отмены.

person Shay Erlichmen    schedule 19.10.2009
comment
Спасибо за быстрый ответ. Я последовал вашему примеру, но проблема не решена полностью. См. Отредактированный вопрос выше. - person Asaf; 19.10.2009