Ciblage de votre application pour Windows

Dans Windows 8.1 et versions ultérieures, les fonctions GetVersion et GetVersionEx ont été dépréciées. À partir de Windows 10, la fonction VerifyVersionInfo est également déconseillée. Vous pouvez toujours appeler les fonctions déconseillées, mais si votre application ne cible pas spécifiquement Windows 8.1 ou version ultérieure, les fonctions retournent la version Windows 8 (6.2).

Notes

GetVersion, GetVersionEx, VerifyVersionInfo et les fonctions d’assistance de version sont uniquement destinées aux applications de bureau. Les applications Windows universelles peuvent utiliser la propriété AnalyticsInfo.VersionInfo pour les journaux de télémétrie et de diagnostic.

Pour que votre application cible Windows 8.1 ou une version ultérieure, vous devez inclure un manifeste d’application (exécutable) pour l’exécutable de l’application. Ensuite, dans la <section compatibilité> du manifeste, vous devez ajouter un <élément supportedOS> pour chaque version de Windows que vous souhaitez déclarer que votre application prend en charge.

L’exemple suivant montre un fichier manifeste d’application pour une application qui prend en charge toutes les versions de Windows de Windows Vista à 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 déclaration de la prise en charge des Windows 8.1 ou versions ultérieures dans votre manifeste d’application n’aura aucun effet lors de l’exécution de votre application sur les systèmes d’exploitation précédents.

Le manifeste d’application ci-dessus comprend également une <section trustInfo>, qui spécifie comment le système doit le traiter en ce qui concerne le contrôle de compte d’utilisateur (UAC). L’ajout de trustInfo n’est pas essentiel, mais il est fortement recommandé, même si votre application n’a pas besoin d’un comportement particulier lié à la UAC. En particulier, si vous n’ajoutez pas du tout trustInfo , les versions x86 32 bits de votre application seront soumises à la virtualisation des fichiers UAC, ce qui permet aux écritures dans des dossiers privilégiés par l’administrateur, comme les dossiers système Windows, de réussir lorsqu’elles échoueraient, mais de les rediriger vers un dossier « VirtualStore » spécifique à l’utilisateur.