Share via


Manifesto do aplicativo

Plataformas afetadas

Clientes – Windows 7
Servidores – Windows Server 2008 R2

Impacto do recurso

Gravidade – Baixa
Frequência – Baixa

Descrição

O Windows 7 apresenta uma nova seção no manifesto do aplicativo chamada "Compatibilidade". Esta seção ajuda o Windows a determinar as versões do Windows que um aplicativo foi projetado para ser direcionado e permite que o Windows forneça o comportamento que o aplicativo espera com base na versão do Windows que o aplicativo direcionou.

A seção Compatibilidade permite que o Windows forneça um novo comportamento para o novo software criado pelo desenvolvedor, mantendo a compatibilidade com o software existente. Esta seção também ajuda o Windows a oferecer maior compatibilidade em versões futuras do Windows. Por exemplo, um aplicativo declarando suporte somente para Windows 7 na seção Compatibilidade continuará recebendo o comportamento do Windows 7 na versão futura do Windows.

Manifestação de alteração

Os aplicativos sem uma seção de compatibilidade em seu manifesto receberão o comportamento do Windows Vista por padrão no Windows 7 e em versões futuras do Windows. Observe que o Windows XP e o Windows Vista ignoram esta seção de manifesto e isso não tem impacto sobre eles.

Os seguintes componentes do Windows fornecem um comportamento divergente com base na seção Compatibilidade no Windows 7:

Pool de Threads Padrão RPC

  • Windows 7: Para melhorar a escalabilidade e reduzir as contagens de threads, o RPC mudou para o pool de threads NT (pool padrão). Para o Windows Vista, o RPC usou um pool de threads privado.
    • Para binários compilados para Win7, o pool padrão é usado
    • Se I_RpcMgmtEnableDedicatedThreadPool for chamado antes que qualquer API RPC seja chamada, o pool de threads privado será usado (comportamento do 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 o Windows Vista e abaixo, o pool privado é usado.

DirectDraw Lock

  • Windows 7: Os aplicativos manifestados para o Windows 7 não podem chamar a API de Bloqueio no DDRAW para bloquear o buffer de vídeo da área de trabalho principal. Isso resultará em erro e o ponteiro NULL para o primário será retornado. Esse comportamento é imposto mesmo que a Composição do Gerenciador de Janelas da Área de Trabalho não esteja ativada. Os aplicativos compatíveis com o Windows 7 não devem bloquear o buffer de vídeo primário a ser renderizado.
  • Windows Vista (padrão): Os aplicativos poderão 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 (Blt) para Primário sem Janela de Recorte

  • Windows 7: Os aplicativos manifestados para o Windows 7 são impedidos de executar blts para o buffer de vídeo da área de trabalho principal sem uma janela de recorte. Isso resultará em erro e a área Blt não será renderizada. O Windows impõe esse comportamento mesmo que você não ative a Composição do Gerenciador de Janelas da Área de Trabalho. Os aplicativos compatíveis com o Windows 7 devem ser adicionados a uma janela de recorte.
  • Windows Vista (padrão): Os aplicativos devem ser capazes de Blt para o 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 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 desejam evitar essa corrida antes do comportamento do Windows 7 devem aguardar o evento sobreposto e, quando sinalizado, chamar GetOverlappedResult com bWait == FALSE.

PCA (Assistente de Compatibilidade do Programa)

  • Windows 7: Os aplicativos com a seção Compatibilidade não receberão a mitigação de PCA.
  • Windows Vista (padrão): Os aplicativos que não instalarem corretamente ou falharem durante o runtime em algumas circunstâncias específicas receberão a mitigação de PCA. Para obter mais detalhes, consulte a seção de referência.

Aproveitando as funcionalidades do recurso

Atualize o manifesto do aplicativo com as informações de compatibilidade mais recentes para suporte ao sistema operacional. A 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)

  • Com suporte para oOS: GUID do sistema operacional com suporte – os GUIDs que são 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: aplicativos que definem esse valor no manifesto do aplicativo obtêm o comportamento do Windows 7.

    Observação

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

     

Veja a seguir um exemplo de um manifesto atualizado.

Observação

Os nomes de atributo e marca no manifesto do aplicativo diferenciam maiúsculas de 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 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>
  </assembly>

O valor de adicionar GUIDs para ambos os sistemas operacionais no exemplo acima é fornecer suporte de nível inferior. Aplicativos que dão suporte a ambas as plataformas não precisariam de manifestos separados para cada plataforma.

Teste de compatibilidade, desempenho, confiabilidade e usabilidade

  1. Teste o aplicativo com a nova seção de compatibilidade e SupportedOS ID ={35138b9a-5d96-4fbd-8e2d-a2440225f93a} para garantir que o aplicativo funcione corretamente usando o comportamento mais recente do Windows 7
  2. Teste o aplicativo com a nova seção de compatibilidade e SupportedOS ID ={e2011457-1546-43c5-a5fe-008deee3d3f0} (ou sem esta seção inteiramente) para garantir que o aplicativo funcione corretamente usando os comportamentos do Windows Vista no Windows 7

Problemas conhecidos

Incompatibilidade de contexto Um aplicativo é executado em um contexto do Windows Vista em vez de em um contexto do Windows 7 em um computador que executa uma edição x64 do Windows 7 ou do Windows Server 2008 R2.

As Atualizações de solução estão disponíveis para corrigir isso para todas as versões baseadas em x64 com suporte do Windows 7 e do Windows Server 2008 R2, bem como para todas as versões baseadas em Itanium com suporte do Windows Server 2008 R2. Vá para a página Suporte da Microsoft de KB 978637: um aplicativo é executado em um contexto do Windows Vista em vez de em um contexto do Windows 7 em um computador que esteja executando uma edição x64 do Windows 7 ou do Windows Server 2008 R2 para obter detalhes adicionais e baixar a versão correta para seu sistema.

Diagnóstico de despejo de memória bloqueado

Solução Vá para a página Suporte da Microsoft para 976038 de KB: exceções geradas de um aplicativo executado em uma versão de 64 bits do Windows são ignoradas para obter detalhes adicionais.