Manifesto do aplicativo (executável)
Plataformas
Clientes – servidores Windows 8 – 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 do Windows que um aplicativo foi projetado para ser direcionado. Além disso, o manifesto do aplicativo 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 de compatibilidade do manifesto permite que o Windows forneça um novo comportamento ao software recém-criado, mantendo a compatibilidade com o software existente. Esta seção ajuda o Windows a oferecer maior compatibilidade em versões futuras do Windows também. Por exemplo, um aplicativo declarando suporte apenas para Windows 8 na seção de compatibilidade continuará recebendo Windows 8 comportamento em versões futuras do Windows.
Manifestação
Os aplicativos sem uma seção de compatibilidade em seu manifesto terão o comportamento do Windows Vista por padrão no Windows 7 e Windows 8 e versões futuras do Windows. Lembre-se de que o Windows XP e o Windows Vista ignoram esta seção de manifesto e isso não tem nenhum impacto sobre eles.
Esses componentes do 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 o Windows Vista, o RPC usou um pool de threads privado:
- Para binários compilados para o 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 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 versões anteriores do Windows, o pool privado é usado.
Bloqueio do DirectDraw
- Windows 8 e Windows 7: os aplicativos manifestados para o 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.
Transferência de bloco de bits do DirectDraw (bitblt) para o primário sem janela de recorte
- Windows 8 e Windows 7: os aplicativos manifestados para o Windows 7 e versões posteriores do 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. O 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 para 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 do 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 o tema como indisponível quando estiver no modo de alto contraste porque o DWM ainda está ativado.
- Windows Vista (padrão): retorna o tema como indisponível 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 for.
A documentação pública que descreve esse comportamento indica que o argumento de caminho deve ser um caminho absoluto:
Windows 7 e anteriores (padrão): CShellLink::Save não determina se o manipulador iPersistFile envia uma verificação de caminho relativo 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 recebem a mitigação de PCA.
- Windows 7: 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): aplicativos que não conseguem instalar corretamente ou falha 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 os recursos de recursos
Atualize o manifesto do aplicativo com as informações de compatibilidade mais recentes para o 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 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
{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 do Windows conforme necessário.
Um exemplo XML de um manifesto atualizado:
Observação
Os nomes de atributo e de 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 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 para 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. O Windows Vista e versões anteriores do sistema operacional não prestam atenção a essas entradas. A partir do Windows 7, o Windows escolherá o GUID de versão mais alta no manifesto até a versão em execução do Windows e dará suporte ao aplicativo nesse nível. Para verificar se o aplicativo funciona com a nova seção de compatibilidade do manifesto do aplicativo:
- 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 de Windows 8 mais recente.
- 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 do Windows 7.
- 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 do Windows Vista.