2009-10-19 2 views
6

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

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

Любые мысли?
Благодаря

[EDIT:]

Я последовал пример Шей в (спасибо), и сделал еще несколько рытья моего. Я добавил следующий 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)
Это решало проблему на Висте 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?

ответ

2

Отрывок из here (переговоров о настройке, но отношение к вашему делу)

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

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

+0

Благодарим за быстрый ответ. Я следовал твоему примеру, но проблема не была полностью решена. См. Отредактированный вопрос выше. – Asaf

Смежные вопросы