2009-10-19 16 views
6

Desarrollo un programa en C++ que podría usar adobe flash, aunque no es esencial.
utilizo CoCreateInstance para crear el objeto flash, y si falla, sé flash no está instalado, así que no lo uso.
Sin embargo, en Vista (y creo que Windows 7 también), cuando el flash no está instalado, después de salir de la aplicación, el "Asistente para compatibilidad de programas" aparece un mensaje que dice que "Este programa requiere un componente de Windows que falta" especificando el flash.ocx

¿Hay alguna manera de evitar que aparezca este mensaje? No quiero obligar a ningún usuario a instalar flash (especialmente porque es el IE ActiveX, y los usuarios de FireFox pueden no tenerlo instalado), y mi aplicación puede funcionar bien sin flash.
Además este mensaje es realmente molesto cuando aparece después de cada ejecución.
No me refiero, por supuesto, a la desactivación de la PCA en la máquina del usuario, pero desactive por programación esta apariencia específica en todas las máquinas.¿Cómo evito que aparezca programáticamente el "Asistente de compatibilidad de programas" en Vista (y Windows 7)?

¿Alguna idea?
Gracias

[EDIT:]

que siguieron el ejemplo de Shay (gracias), e hicieron un poco más de excavación de la mía. He añadido el siguiente código XML de manifiesto de la aplicación:

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

(véase también: msdn.microsoft.com/en-us/library/bb756929.aspx)
Esto resolvió el problema en Vista 64.

Para resolver el mismo problema en Windows 7, añadí la siguiente :

<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> 

(Ver también: blogs.msdn.com/yvesdolc/archive/2009/09/22/the-new-compatibility-section-in-the-application-manifest.aspx)

Resuelto Windows 7.

Pero por alguna razón, todavía sucede en Vista 32 ...

También probé la edición del manifiesto de la DLL específico que causa el problema, pero no tuvo ningún efecto. Solo el manifiesto del ejecutable en sí mismo afectó el problema.

Así que ... Vista 32?

Respuesta

2

de fragmentos de here (Habla de configuración, pero relevante para su caso)

¿Cómo puedo optar por el Asistente para la compatibilidad del Programa para mi configuración ?

Con el fin de evitar que el Asistente para la compatibilidad Programa de que aparece, debe incluir un manifiesto incrustado que especifica un nivel de ejecución solicitado para su ejecutable configuración. Si envuelve el ejecutable configuración en un paquete de extracción automática , debe incluir también un manifiesto incrustado en el paquete autoextraíble también.Una vez que hace esto, Windows Vista tratar su configuración como consciente de Windows Vista, y ya no mostrará el PCA de diálogo de configuración de las salidas cuando después de un fallo o cancelación.

+0

Gracias por la respuesta rápida. Seguí tu ejemplo, pero el problema no está completamente resuelto. Ver la pregunta editada arriba. – Asaf

Cuestiones relacionadas