2009-10-19 5 views
6

Je développe un programme C++ qui pourrait utiliser Adobe Flash, même si ce n'est pas essentiel.
J'utilise CoCreateInstance pour créer l'objet flash, et en cas d'échec, je sais que Flash n'est pas installé, donc je ne l'utilise pas. Cependant, dans Vista (et je pense que Windows 7 aussi), quand le flash n'est pas installé, après avoir quitté l'application, le "Program Compatibility Assistant" affiche un message disant que "Ce programme nécessite un composant Windows manquant". flash.ocx.

Existe-t-il un moyen d'empêcher l'affichage de ce message? Je ne veux pas forcer n'importe quel utilisateur à installer Flash (d'autant plus qu'il s'agit de l'IE ActiveX, et les utilisateurs de FireFox peuvent ne pas l'avoir installé), et mon application peut bien fonctionner sans le flash.
De plus, ce message est vraiment énervant lorsqu'il apparaît après chaque passage.
Je ne veux pas dire, bien sûr, désactiver la PCA sur la machine de l'utilisateur, mais désactiver par programmation cet aspect spécifique sur toutes les machines.Comment empêcher l'apparition de "l'Assistant de compatibilité de programme" dans Vista (et Windows 7) par programme?

Des pensées?
Merci

[EDIT:]

Je suivi l'exemple de Shay (merci), et a fait un peu plus creuser de moi-même. J'ai ajouté le code XML suivant au manifeste de l'application:

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

(voir aussi: msdn.microsoft.com/en-us/library/bb756929.aspx)
Ceci a résolu le problème sur Vista 64.

Pour résoudre le même problème sur Windows 7, j'ajouté ce qui suit :

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

(Voir aussi: blogs.msdn.com/yvesdolc/archive/2009/09/22/the-new-compatibility-section-in-the-application-manifest.aspx)

Résolu Windows 7.

Mais pour une raison quelconque, il arrive encore dans Vista 32 ...

J'ai aussi essayé de modifier le manifeste de la DLL spécifique qui cause le problème, mais il n'a eu aucun effet. Seul le manifeste de l'exécutable lui-même a affecté le problème.

Alors ... Vista 32?

Répondre

2

Snippet de here (discussions sur la configuration mais pertinente à votre cas)

Comment puis-je retirer de l'assistant de compatibilité des programmes pour ma configuration ?

Afin d'éviter l'assistant de compatibilité des programmes de apparaît, vous devez inclure un manifeste intégré qui spécifie un niveau d'exécution demandé pour votre exécutable d'installation . Si vous encapsulez l'exécutable d'installation dans un package auto-extractible , vous devez également inclure un manifeste incorporé dans le package auto-extractible .Une fois que vous faire cela, Windows Vista traitera votre installation comme Windows Vista-aware, et ne montrera plus la boîte de dialogue PCA lorsque l'installation se termine après une défaillance ou l'annulation .

+0

Merci pour la réponse rapide. J'ai suivi votre exemple, mais le problème n'est pas complètement résolu. Voir la question éditée ci-dessus. – Asaf

Questions connexes