Share via


Manifiesto de aplicación (ejecutable)

Plataformas

Clientes: servidores de Windows 8: Windows Server 2012

Descripción

La sección de compatibilidad del manifiesto de aplicación (ejecutable) introducido en Windows ayuda al sistema operativo a determinar las versiones de Windows a las que se diseñó una aplicación como destino. Además, el manifiesto de la aplicación permite a Windows proporcionar el comportamiento que espera la aplicación en función de la versión de Windows a la que se dirige la aplicación.

La sección de compatibilidad del manifiesto permite a Windows proporcionar un nuevo comportamiento al software recién creado, a la vez que mantiene la compatibilidad con el software existente. Esta sección también ayuda a Windows a ofrecer una mayor compatibilidad en versiones futuras de Windows. Por ejemplo, una aplicación que declara la compatibilidad con solo Windows 8 en la sección de compatibilidad seguirá recibiendo Windows 8 comportamiento en versiones futuras de Windows.

Manifestación

Las aplicaciones sin una sección de compatibilidad en su manifiesto tendrán el comportamiento de Windows Vista de forma predeterminada en Windows 7 y Windows 8 y versiones futuras de Windows. Tenga en cuenta que Windows XP y Windows Vista omiten esta sección de manifiesto y no tienen ningún impacto en ellos.

Estos componentes de Windows proporcionan un comportamiento divergente en función de la sección de compatibilidad:

Grupo de subprocesos predeterminado de llamada a procedimiento remoto (RPC)

  • Windows 8 y Windows 7: para mejorar la escalabilidad y reducir los recuentos de subprocesos, RPC cambió al grupo de subprocesos NT (grupo predeterminado). Para Windows Vista, RPC usó un grupo de subprocesos privados:

    • En el caso de los archivos binarios compilados para Windows 7 y versiones posteriores de Windows, se usa el grupo predeterminado.
    • Si se llama a I_RpcMgmtEnableDedicatedThreadPool antes de llamar a cualquier API rpc, se usa el grupo de subprocesos privados (comportamiento de Vista).
    • Si se llama a I_RpcMgmtEnableDedicatedThreadPool después de una llamada RPC, se usa el grupo predeterminado, I_RpcMgmtEnableDedicatedThreadPool devuelve el error 1764 y no se admite la operación solicitada.
  • Windows Vista (valor predeterminado): para archivos binarios compilados para Windows Vista y versiones anteriores de Windows, se usa el grupo privado.

Bloqueo de DirectDraw

  • Windows 8 y Windows 7: las aplicaciones manifestadas para Windows 7 y versiones posteriores del sistema operativo no pueden llamar a lock API en DDRAW para bloquear el búfer de vídeo de escritorio principal; si lo hace, se producirá un error y se devuelve un puntero NULL para el principal. Este comportamiento se aplica incluso si la composición del Administrador de ventanas de escritorio no está activada. Las aplicaciones con compatibilidad declaradas para Windows 7 y versiones posteriores no deben bloquear el búfer de vídeo principal para representarse.
  • Windows Vista (valor predeterminado): las aplicaciones pueden adquirir un bloqueo en el búfer de vídeo principal, ya que las aplicaciones heredadas dependen de este comportamiento; la ejecución de la aplicación desactiva el Administrador de ventanas de escritorio.

Transferencia de bloque de bits (bitblt) de DirectDraw a la principal sin ventana de recorte

  • Windows 8 y Windows 7: las aplicaciones manifestadas para Windows 7 y versiones posteriores de Windows no pueden realizar un bitblt en el búfer de vídeo principal de escritorio sin una ventana de recorte; al hacerlo, se produce un error y el área bitblt no se representará. Windows aplica este comportamiento incluso si no activa la Composición del Administrador de ventanas de escritorio. Las aplicaciones con compatibilidad declaradas para Windows 7 y versiones posteriores deben realizar un bitblt en una ventana de recorte.
  • Windows Vista (valor predeterminado): las aplicaciones deben ser capaces de realizar un bitblt en la principal sin una ventana de recorte, ya que las aplicaciones heredadas dependen de este comportamiento; la ejecución de esta aplicación desactiva el Administrador de ventanas de escritorio.

GetOverlappedResult API

  • Windows 8 y Windows 7: resuelve una condición de carrera en la que una aplicación multiproceso mediante GetOverlappedResult puede devolver sin restablecer el evento en la estructura superpuesta, lo que hace que la siguiente llamada a esta función vuelva prematuramente.
  • Windows Vista (valor predeterminado): proporciona el comportamiento con la condición de carrera en la que las aplicaciones pueden tener una dependencia. Las aplicaciones que deben evitar esta carrera antes del comportamiento de Windows 7 deben esperar al evento superpuesto y, cuando se indique, llame a GetOverlappedResult con bWait == FALSE.

Estado de los temas de Shell en modo de contraste alto

  • Windows 8: devuelve el estado real de creación de tema para cuando está en modo de contraste alto.
  • Windows 7: devuelve temas como no disponibles cuando se encuentra en modo de contraste alto porque DWM todavía está activado.
  • Windows Vista (valor predeterminado): devuelve temas como no disponibles cuando se encuentra en modo de contraste alto porque DWM todavía está activado.

Método iPersistFile::Save de Shell

  • Windows 8: CShellLink::Save ahora determina si se llama al controlador IPersistFile con un argumento de ruta de acceso relativa y se produce un error en la llamada si es.

    La documentación pública que describe este comportamiento indica que el argumento path debe ser una ruta de acceso absoluta:

  • Windows 7 y versiones anteriores (valor predeterminado): CShellLink::Save no determina si el controlador iPersistFile envía una comprobación de ruta de acceso relativa y permite a las aplicaciones seguir trabajando con rutas de acceso absolutas o relativas.

Asistente de compatibilidad de programas (PCA)

  • Windows 8: las aplicaciones con la sección de compatibilidad no obtienen la mitigación de PCA.
  • Windows 7: Se realiza un seguimiento de las aplicaciones con la sección de compatibilidad para detectar posibles problemas de compatibilidad para Windows 8 cambios (descritos en este documento).
  • Windows Vista (valor predeterminado): las aplicaciones que no se instalan correctamente o se bloquean durante el tiempo de ejecución en algunas circunstancias específicas obtienen la mitigación de PCA. Para obtener más información, consulta la sección Recursos.

Aprovechamiento de las funcionalidades de características

Actualice el manifiesto de la aplicación con la información de compatibilidad más reciente para la compatibilidad con el sistema operativo. En esta sección se describen las adiciones al manifiesto:

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

Nombre de sección: Compatibilidad (nueva sección)

SupportedOS: GUID del sistema operativo compatible: los GUID que se asignan a los sistemas operativos compatibles son:

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

    para Windows Vista: este es el valor predeterminado para el contexto de conmutación

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

    para Windows 7: las aplicaciones que establecen este valor en el manifiesto de la aplicación obtienen el comportamiento de Windows 7

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

    para Windows 8: las aplicaciones que establecen este valor en el manifiesto de aplicación obtienen el comportamiento de Windows 8

Microsoft generará y publicará GUID para futuras versiones de Windows según sea necesario.

Un ejemplo XML de un manifiesto actualizado:

Nota:

Los nombres de atributo y etiqueta del manifiesto de la aplicación distinguen mayú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>

Los GUID de todos los sistemas operativos del ejemplo anterior proporcionan compatibilidad de nivel descendente. Las aplicaciones que admiten varias plataformas no necesitan manifiestos independientes para cada plataforma.

Pruebas

Una aplicación puede especificar varios identificadores de sistema operativo compatibles. Debe agregar un identificador de sistema operativo compatible si ha probado o está en proceso de pruebas, la aplicación en ese sistema operativo. Windows Vista y versiones anteriores del sistema operativo no prestan atención a estas entradas. A partir de Windows 7, Windows elegirá el GUID de versión más alto en el manifiesto hasta la versión de Windows en ejecución y proporcionará compatibilidad con la aplicación en ese nivel. Para comprobar que la aplicación funciona con la nueva sección de compatibilidad del manifiesto de aplicación:

  1. Pruebe la aplicación con la nueva sección de compatibilidad y supportedOS ID = { 4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38} para asegurarse de que la aplicación funciona correctamente con el comportamiento de Windows 8 más reciente.
  2. Pruebe la aplicación con la nueva sección de compatibilidad y supportedOS ID = {35138b9a-5d96-4fbd-8e2d-a2440225f93a} para asegurarse de que la aplicación funciona correctamente con el comportamiento de Windows 7.
  3. Pruebe la aplicación con la nueva sección de compatibilidad y supportedOS ID = {e2011457-1546-43c5-a5fe-008deee3d3f0} para asegurarse de que la aplicación funciona correctamente con el comportamiento de Windows Vista.

Recursos