Manifesto do aplicativo (executável)

Plataformas

Clientes – Windows 8
Servidores – Windows Server 2012

Descrição

A seção de compatibilidade do manifesto do aplicativo (executável) introduzido no Windows ajuda o sistema operacional a determinar as versões de Windows um aplicativo foi projetado para ser direcionado. Além disso, o manifesto do aplicativo permite que Windows forneça o comportamento que o aplicativo espera com base na versão de Windows que o aplicativo destinou.

A seção de compatibilidade do manifesto permite que Windows forneçam um novo comportamento ao software recém-criado, mantendo a compatibilidade com o software existente. Esta seção ajuda Windows fornecer maior compatibilidade em versões futuras de Windows também. Por exemplo, um aplicativo declarando suporte apenas para Windows 8 na seção de compatibilidade continuará a receber Windows 8 comportamento em versões futuras do Windows.

Manifestação

Os aplicativos sem uma seção de compatibilidade no manifesto terão Windows comportamento do Vista por padrão nas versões Windows 7 e Windows 8 e futuras Windows. Lembre-se de que Windows XP e Windows Vista ignoram esta seção de manifesto e isso não tem impacto sobre eles.

Esses componentes Windows fornecem um comportamento divergente com base na seção de compatibilidade:

Pool de threads padrão de RPC (chamada de procedimento remoto)

  • Windows 8 e Windows 7: para melhorar a escalabilidade e reduzir as contagens de threads, o RPC alternou para o pool de threads NT (pool padrão). Para Windows Vista, o RPC usou um pool de threads privado:

    • Para binários compilados para Windows 7 e versões posteriores do Windows, o pool padrão é usado.
    • Se I_RpcMgmtEnableDedicatedThreadPool for chamado antes de qualquer API RPC ser chamada, o pool de threads privado será usado (comportamento vista).
    • Se I_RpcMgmtEnableDedicatedThreadPool for chamado após uma chamada RPC, o pool padrão será usado, I_RpcMgmtEnableDedicatedThreadPool retornará o erro 1764 e a operação solicitada não terá suporte.
  • Windows Vista (padrão): para binários compilados para Windows Vista e versões anteriores do Windows, o pool privado é usado.

Bloqueio DirectDraw

  • Windows 8 e Windows 7: os aplicativos manifestados para Windows 7 e versões posteriores do sistema operacional não podem chamar a API de Bloqueio no DDRAW para bloquear o buffer de vídeo da área de trabalho primária; isso resultará em um erro e um ponteiro NULL para o primário é retornado. Esse comportamento é imposto mesmo se a Composição do Gerenciador de Janelas da Área de Trabalho não estiver ativada. Aplicativos com compatibilidade declarada para Windows 7 e posteriores não devem bloquear o buffer de vídeo primário a ser renderizado.
  • Windows Vista (padrão): os aplicativos podem adquirir um bloqueio no buffer de vídeo primário, pois os aplicativos herdados dependem desse comportamento; a execução do aplicativo desativa o Gerenciador de Janelas da Área de Trabalho.

DirectDraw bit-block transfer (bitblt) para primário sem janela de recorte

  • Windows 8 e Windows 7: aplicativos manifestados para Windows 7 e versões posteriores de Windows são impedidos de executar um bitblt no buffer de vídeo da Área de Trabalho primária sem uma janela de recorte; isso resulta em um erro e a área bitblt não será renderizada. Windows impõe esse comportamento mesmo que você não ative a Composição do Gerenciador de Janelas da Área de Trabalho. Aplicativos com compatibilidade declarada para Windows 7 e posterior devem executar um bitblt em uma janela de recorte.
  • Windows Vista (padrão): os aplicativos devem ser capazes de executar um bitblt no primário sem uma janela de recorte, pois os aplicativos herdados dependem desse comportamento; a execução desse aplicativo desativa o Gerenciador de Janelas da Área de Trabalho.

GetOverlappedResult API

  • Windows 8 e Windows 7: resolve uma condição de corrida em que um aplicativo multithread usando GetOverlappedResult pode retornar sem redefinir o evento na estrutura sobreposta, fazendo com que a próxima chamada a essa função retorne prematuramente.
  • Windows Vista (padrão): Fornece o comportamento com a condição de corrida na qual os aplicativos podem ter uma dependência. Os aplicativos que devem evitar essa corrida antes do comportamento Windows 7 devem aguardar o evento sobreposto e, quando sinalizado, chamar GetOverlappedResult com bWait == FALSE.

Status dos temas do Shell no modo de alto contraste

  • Windows 8: retorna o status real de temas para quando estiver no modo de alto contraste.
  • Windows 7: retorna temas como indisponíveis quando estiver no modo de alto contraste porque o DWM ainda está ativado.
  • Windows Vista (padrão): retorna temas como indisponíveis quando estiver no modo de alto contraste porque o DWM ainda está ativado.

Método Shell iPersistFile::Save

  • Windows 8: CShellLink::Save agora determina se o manipulador IPersistFile é chamado com um argumento de caminho relativo e falha na chamada se ela for.

    A documentação pública que descreve esse comportamento indica que o argumento de caminho deve ser um caminho absoluto:

  • Windows 7 e anterior (padrão): CShellLink::Save não determina se o manipulador iPersistFile envia uma verificação de caminho relativa e permite que os aplicativos continuem trabalhando com caminhos absolutos ou relativos.

PCA (Assistente de Compatibilidade do Programa)

  • Windows 8: os aplicativos com a seção de compatibilidade não obtêm a mitigação de PCA.
  • Windows 7: os aplicativos com a seção de compatibilidade são rastreados para possíveis problemas de compatibilidade para Windows 8 alterações (descritos neste documento).
  • Windows Vista (padrão): os aplicativos que não instalam corretamente ou falham durante o runtime em algumas circunstâncias específicas obtêm a mitigação de PCA. Para obter mais informações, consulte a seção Recursos.

Aproveitando recursos

Atualize o manifesto do aplicativo com as informações de compatibilidade mais recentes para suporte ao sistema operacional. Esta seção descreve as adições ao manifesto:

Namespace: Compatibility.v1 (xmlns="urn:schemas-microsoft-com:compatibility.v1">)

Nome da seção: Compatibilidade (nova seção)

SupportedOS: GUID do sistema operacional com suporte – Os GUIDs mapeados para os sistemas operacionais com suporte são:

  • {e2011457-1546-43c5-a5fe-008deee3d3f0}

    para Windows Vista: esse é o valor padrão para o contexto de alternância

  • {35138b9a-5d96-4fbd-8e2d-a2440225f93a}

    para Windows 7: os aplicativos que definem esse valor no manifesto do aplicativo obtêm o comportamento Windows 7

  • {4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}

    para Windows 8: aplicativos que definem esse valor no manifesto do aplicativo obtêm o comportamento Windows 8

A Microsoft gerará e postará GUIDs para versões futuras Windows, conforme necessário.

Um exemplo XML de um manifesto atualizado:

Observação

Os nomes de atributo e marca no manifesto do aplicativo diferenciam maiúsculas e minúsculas.

 

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> 
    <application> 
        <!--The ID below indicates app support for Windows Vista -->
        <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/> 
        <!--The ID below indicates app support for Windows 7 -->
        <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
        <!--The ID below indicates app support for Windows 8 -->
        <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
    </application> 
</compatibility>
</assembly>

Os GUIDs de todos os sistemas operacionais no exemplo anterior fornecem suporte de nível inferior. Aplicativos que dão suporte a várias plataformas não precisam de manifestos separados para cada plataforma.

Testes

Um aplicativo pode especificar várias IDs do sistema operacional com suporte. Você deve adicionar uma ID do sistema operacional com suporte se tiver testado ou estiver em processo de teste, o aplicativo nesse sistema operacional. Windows Vista e versões anteriores do sistema operacional não prestam atenção a essas entradas. A partir do Windows 7, Windows escolherá o GUID da versão mais alta no manifesto até a versão do Windows em execução e dará suporte ao aplicativo nesse nível. Para verificar se o aplicativo funciona com a nova seção de compatibilidade de manifesto do aplicativo:

  1. Teste o aplicativo com a nova seção de compatibilidade e a ID do SupportedOS = { 4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38} para garantir que o aplicativo funcione corretamente usando o comportamento mais recente do Windows 8.
  2. Teste o aplicativo com a nova seção de compatibilidade e a ID do SupportedOS = {35138b9a-5d96-4fbd-8e2d-a2440225f93a} para garantir que o aplicativo funcione corretamente usando o comportamento Windows 7.
  3. Teste o aplicativo com a nova seção de compatibilidade e a ID do SupportedOS = {e2011457-1546-43c5-a5fe-008deee3d3f0} para garantir que o aplicativo funcione corretamente usando o comportamento Windows Vista.

Recursos