Manifiesto de aplicación (ejecutable)
Plataformas
Clientes: Windows 8
servidores de: 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 que una aplicación se diseñó como destino. Además, el manifiesto de 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 solo con Windows 8 en la sección de compatibilidad seguirá recibiendo el comportamiento de Windows 8 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 los archivos binarios compilados para Windows Vista y versiones anteriores de Windows, se usa el grupo privado.
de 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 servidor 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 que se va a representar.
- 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; Al ejecutar la aplicación, se desactiva el Administrador de ventanas de escritorio.
transferencia de bloques de bits (bitblt) de DirectDraw a la principal sin recortar ventana
- 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; si lo hace, se producirá 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 poder realizar un bitblt en la principal sin una ventana de recorte, ya que las aplicaciones heredadas dependen de este comportamiento; Al ejecutar esta aplicación, se desactiva el Administrador de ventanas de escritorio.
api GetOverlappedResult
- 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 devuelva prematuramente.
- Windows Vista (valor predeterminado): proporciona el comportamiento con la condición de carrera en la que las aplicaciones podrían tener una dependencia. Las aplicaciones que deben evitar esta carrera antes del comportamiento de Windows 7 deben esperar en el evento superpuesto y, cuando se señale, 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 temas para cuando está en modo de contraste alto.
- Windows 7: devuelve el tema como no disponible cuando está en modo de contraste alto porque DWM todavía está activado.
- Windows Vista (valor predeterminado): devuelve el tema como no disponible cuando está 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 así.
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 del programa (PCA) de
- 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 con los cambios de Windows 8 (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 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:
Espacio de nombres: Compatibility.v1 (xmlns="urn:schemas-microsoft-com:compatibility.v1">)
Nombre de sección: compatibilidad de (nueva sección)
SupportedOS: GUID del sistema operativo compatible: los GUID que se asignan a los sistemas operativos admitidos 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 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 anterior. 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 prueba, la aplicación en ese sistema operativo. Windows Vista y versiones anteriores del sistema operativo no presten atención a estas entradas. A partir de Windows 7, Windows elegirá el GUID de la versión más alta 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:
- 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 más reciente de Windows 8.
- 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.
- 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
- función QueryActCtxW de
- de manifiesto de UAC
- manifiestos de aplicación para aplicaciones windows
- Administrador de ventanas de escritorio (DWM)
- actualización de errores de coincidencia de contexto de
- asistente de compatibilidad del programa