Orientar la aplicación a Windows

En Windows 8.1 y versiones posteriores, las funciones GetVersion y GetVersionEx han quedado en desuso. A partir de Windows 10, la función VerifyVersionInfo también está en desuso. Todavía puede llamar a las funciones en desuso, pero si la aplicación no tiene como destino específicamente Windows 8.1 o posterior, las funciones devolverán la versión de Windows 8 (6.2).

Nota

Las funciones GetVersion, GetVersionEx, VerifyVersionInfo y Version Helper son solo para aplicaciones de escritorio. Las aplicaciones universales de Windows pueden usar la propiedad AnalyticsInfo.VersionInfo para los registros de telemetría y diagnóstico.

Para que la aplicación tenga como destino Windows 8.1 o posterior, deberá incluir un manifiesto de aplicación (ejecutable) para el ejecutable de la aplicación. A continuación, en la <sección de compatibilidad> del manifiesto, deberá agregar un <elemento supportedOS> para cada versión de Windows que quiera declarar que la aplicación admite.

En el ejemplo siguiente se muestra un archivo de manifiesto de aplicación para una aplicación que admite todas las versiones de Windows de Windows Vista a Windows 11:

<!-- example.exe.manifest -->
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
    <assemblyIdentity
        type="win32"
        name="Contoso.ExampleApplication.ExampleBinary"
        version="1.2.3.4"
        processorArchitecture="x86"
    />
    <description>Contoso Example Application</description>
    <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
        <application>
            <!-- Windows 10 and Windows 11 -->
            <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
            <!-- Windows 8.1 -->
            <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
            <!-- Windows 8 -->
            <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
            <!-- Windows 7 -->
            <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
            <!-- Windows Vista -->
            <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/> 
        </application>
    </compatibility>
    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
        <security>
            <requestedPrivileges>
                <!--
                  UAC settings:
                  - app should run at same integrity level as calling process
                  - app does not need to manipulate windows belonging to
                    higher-integrity-level processes
                  -->
                <requestedExecutionLevel
                    level="asInvoker"
                    uiAccess="false"
                />   
            </requestedPrivileges>
        </security>
    </trustInfo>
</assembly>

La declaración de compatibilidad con Windows 8.1 o posterior en el manifiesto de la aplicación no tendrá ningún efecto al ejecutar la aplicación en sistemas operativos anteriores.

El manifiesto de aplicación anterior también incluye una <sección trustInfo>, que especifica cómo el sistema debe tratarlo con respecto al Control de cuentas de usuario (UAC). Agregar trustInfo no es esencial, pero es muy recomendable, incluso cuando la aplicación no necesita ningún comportamiento específico relacionado con UAC. En concreto, si no agregas trustInfo en absoluto, las versiones x86 de 32 bits de la aplicación estarán sujetas a la virtualización de archivos UAC, lo que permite que las escrituras en carpetas con privilegios de administrador, como las carpetas del sistema de Windows, se realicen correctamente cuando se produzcan errores en caso contrario, pero las redirige a una carpeta "VirtualStore" específica del usuario.