2009-10-19 9 views
6

Opracowuję program w C++, który może używać Adobe Flash, chociaż nie jest to konieczne.
Używam CoCreateInstance do tworzenia obiektu Flash, a jeśli się nie uda, wiem, że Flash nie jest zainstalowany, więc go nie używam.
Jednak w systemie Vista (i myślę, że również w systemie Windows 7), gdy flash nie jest zainstalowany, po opuszczeniu aplikacji, "Program kompatybilności Assistant" pojawia się komunikat, że "Ten program wymaga brakującego składnika systemu Windows" określając flash.ocx.

Czy istnieje sposób, aby zapobiec wyświetlaniu tego komunikatu? Nie chcę zmuszać żadnego użytkownika do instalacji flasha (zwłaszcza, że ​​jest to IE ActiveX, a użytkownicy FireFox mogą go nie instalować), a moja aplikacja może działać dobrze bez lampy błyskowej.
Plus ten komunikat jest naprawdę denerwujący, gdy pojawia się po każdym uruchomieniu.
Nie mam na myśli oczywiście wyłączenia PCA na komputerze użytkownika, ale programowo wyłączyć ten specyficzny wygląd na wszystkich komputerach.Jak uniemożliwić programistyczne wyświetlanie "Asystenta zgodności programów" w systemie Vista (i Windows 7)?

Jakieś myśli?
Dzięki

[EDIT:]

Śledziłem prowadzenie Shay użytkownika (dzięki), i zrobił trochę więcej kopania własną rękę. Dodałem następujące XML do manifestu aplikacji:

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

(zobacz także: msdn.microsoft.com/en-us/library/bb756929.aspx)
To rozwiązało problem na Vista 64.

Aby rozwiązać ten sam problem w systemie Windows 7, dodałem następujące :

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

(Patrz także: blogs.msdn.com/yvesdolc/archive/2009/09/22/the-new-compatibility-section-in-the-application-manifest.aspx)

Solved systemu Windows 7.

Ale z jakiegoś powodu, nadal dzieje się w Vista 32 ...

Próbowałem też edycję manifest specyficznego DLL, który powoduje problem, ale to nie miało żadnego wpływu. Tylko sam plik wykonywalny wpłynął na problem.

Więc ... Vista 32?

Odpowiedz

2

Fragment z here (mówi o konfiguracji ale istotne dla sprawy)

Jak mogę zrezygnować z Asystent zgodności programów dla mojego konfiguracji?

W celu zapobieżenia Program Compatibility Assistant z pojawiającym należy zawierać osadzonego manifestu, który określa żądany poziom realizacji dla pliku wykonywalnego konfiguracji. Jeśli owinąć plik wykonywalny instalacji w samorozpakowującym się pakiecie , należy również dołączyć do niego wbudowany manifest w pakiecie samorozpakowującym .Po wykonaniu tej czynności system Windows Vista traktuje konfigurację jako system Windows Vista, a następnie nie będzie wyświetlać okna dialogowego PCA po zakończeniu konfiguracji po niepowodzeniu lub anulowaniu .

+0

Dzięki za szybką odpowiedź. Poszedłem za twoim tropem, ale problem nie został całkowicie rozwiązany. Zobacz edytowane pytanie powyżej. – Asaf

Powiązane problemy