Manifesto do aplicativo
Plataformas afetadas
Clientes - Windows 7
de servidores - Windows Server 2008 R2
Impacto nos recursos
Gravidade - Baixa
Frequência - Baixa
Descrição
O Windows 7 introduz uma nova seção no manifesto do aplicativo chamada "Compatibilidade". Esta seção ajuda o Windows a determinar as versões do Windows para as quais um aplicativo foi projetado e permite que o Windows forneça o comportamento esperado pelo aplicativo com base na versão do Windows que o aplicativo destinou.
A seção Compatibilidade permite que o Windows forneça um novo comportamento ao novo software criado pelo desenvolvedor, mantendo a compatibilidade para 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 que declara suporte apenas para o Windows 7 na seção Compatibilidade continuará a receber o comportamento do Windows 7 em versões futuras do Windows.
Manifestação de Mudança
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 essa seção de manifesto e isso não tem impacto sobre eles.
Os seguintes componentes do Windows fornecem 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 alternou 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 de qualquer API RPC ser chamada, o pool de threads privados 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 será suportada
- Windows Vista (padrão): Para binários compilados para o Windows Vista e inferiores, o pool privado é usado.
de bloqueio do DirectDraw
- 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 primário da área de trabalho. Isso resultará em erro e ponteiro de NULL para o primário será retornado. Esse comportamento é imposto mesmo se o Desktop Window Manager Composition não estiver ativado. Os aplicativos compatíveis com o Windows 7 não devem bloquear o buffer de vídeo principal para renderização.
- 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 Desktop Window Manager.
Transferência de bloco de bits (Blt) do DirectDraw para o primário sem janela de recorte
- Windows 7: Os aplicativos manifestados para o Windows 7 são impedidos de executar Blt's no buffer de vídeo principal da área de trabalho sem uma janela de recorte. Isso resultará em erro e a área Blt não será renderizada. O Windows impõe esse comportamento mesmo se você não ativar a composição do Gerenciador de janelas da área de trabalho. Os aplicativos compatíveis com o Windows 7 devem ser Blt para 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 desta aplicação desativa o Gestor de janelas do ambiente de trabalho.
da API GetOverlappedResult
- Windows 7: Resolve uma condição de corrida em que um aplicativo multithreaded usando GetOverlappedResult pode retornar sem redefinir o evento na estrutura sobreposta, fazendo com que a próxima chamada para essa função retorne prematuramente.
- Windows Vista (padrão): Fornece o comportamento com a condição de corrida da 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.
Assistente de Compatibilidade de Programas (PCA)
- seção Windows 7: Aplicativos com Compatibilidade não receberá a mitigação PCA.
- Windows Vista (padrão): Os aplicativos que não forem instalados corretamente ou falharem durante o tempo de execução em algumas circunstâncias específicas receberão a atenuação do PCA. Para obter mais detalhes, consulte a seção de referência.
Aproveitando os recursos de recursos
Atualize o manifesto do aplicativo com as informações de compatibilidade mais recentes para suporte ao sistema operacional. A secção descreve os aditamentos 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 suportado - Os GUIDs que mapeiam para os sistemas operacionais suportados são:
- {e2011457-1546-43c5-a5fe-008deee3d3f0} para Windows Vista: Este é o valor padrão para o contexto de switchback.
- {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 irá gerar e postar GUIDs para futuras versões do Windows, conforme necessário.
Segue-se um exemplo de um manifesto atualizado.
Observação
Os nomes de atributos e tags 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. Os aplicativos que suportam ambas as plataformas não precisariam de manifestos separados para cada plataforma.
Testes de compatibilidade, desempenho, confiabilidade e usabilidade
- 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 - 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 esteja executando uma edição x64 do Windows 7 ou do Windows Server 2008 R2.
Solution Updates estão disponíveis para corrigir isso para todas as versões baseadas em x64 com suporte do Windows 7 e 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 de Suporte da Microsoft para 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 o seu sistema.
Diagnóstico de despejo de memória bloqueado
Solução Vá para a página de Suporte da Microsoft para KB 976038: As exceções lançadas de um aplicativo executado em uma versão de 64 bits do Windows são ignoradas para obter detalhes adicionais.
Links para outros recursos
- da função QueryActCtxW
- de manifesto do UAC
- Manifestos de aplicativos para aplicativos do Windows
- Desktop Window Manager (DWM)
- Atualização de incompatibilidade de contexto