Vérification de la version de Windows

La version du système d’exploitation a été incrémentée avec la version du système d’exploitation Windows 10. Cela signifie que le numéro de version interne de Windows 10 a également été remplacé par 10.0. Comme précédemment, nous faisons le maximum pour maintenir la compatibilité entre les applications et les appareils après un changement de version du système d’exploitation. Pour la plupart des catégories d’applications (sans dépendances de noyau), la modification n’aura pas d’impact négatif sur les fonctionnalités de l’application et les applications existantes continueront de fonctionner correctement sur Windows 10.

Manifestations

La manifestation de cette modification est propre à l’application. En d’autres termes, une application qui vérifie spécifiquement la version du système d’exploitation obtient un numéro de version supérieur, ce qui peut conduire aux situations suivantes :

  • Les programmes d’installation des applications peuvent ne pas être en mesure d’installer les applications, ou les applications peuvent être dans l’impossibilité de démarrer.
  • Les applications peuvent devenir instables ou se planter.
  • Les applications peuvent générer des messages d’erreur, tout en continuant de fonctionner correctement.

Certaines applications effectuent une vérification de version et transmettent simplement un avertissement aux utilisateurs. Cependant, certaines d’entre elles sont liées très étroitement à une vérification de la version (dans les pilotes ou en mode noyau pour éviter la détection). Dans ce cas, les applications échouent si une version incorrecte est détectée. Au lieu d’une vérification de la version, nous vous recommandons une des approches suivantes :

  • Si l’application dépend de fonctionnalités d’API spécifiques, veillez à cibler la version d’API correcte.
  • Le numéro de version NTDDI (interface du pilote de périphérique NT) n’incrémente que si la fonctionnalité cible dans l’API change. Veillez à détecter la modification via APISet ou une autre API exposée créée par l’équipe de fonctionnalités et à ne pas utiliser la version comme proxy pour une fonctionnalité ou un correctif. En cas de changements cassants, et si une vérification correcte n’est pas exposée, il s’agit d’un bogue.
  • Assurez-vous que l’application ne vérifie pas la version de manière impaire, par exemple via le Registre, les versions de fichiers, les décalages, le mode noyau, les pilotes ou d’autres moyens. Si l’application doit absolument vérifier la version, utilisez les API GetVersion, qui doivent retourner le numéro principal, mineur et de build.
  • Si vous utilisez l’API GetVersion ou d’autres fonctions d’assistance de version telles que VerifyVersionInfo, n’oubliez pas que le comportement de cette API a changé depuis Windows 8.1. Pour plus d’informations, consultez la documentation de l’API .
  • Si vous possédez des applications telles que des logiciels anti-programme malveillant ou un pare-feu, vous devez utiliser vos canaux de commentaires habituels et via le programme Windows Insider.

Manifeste de l’application

Voici un exemple de manifeste d’application :

<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=SXS_ASSEMBLY_NAME
        version=SXS_ASSEMBLY_VERSION
        processorArchitecture=SXS_PROCESSOR_ARCHITECTURE
    />
    <description> my app exe </description>
    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
        <security>
            <requestedPrivileges>
                <requestedExecutionLevel
                    level="asInvoker"
                    uiAccess="false"
                />   
            </requestedPrivileges>
        </security>
    </trustInfo>
    <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> 
        <application> 

      * <!-- Windows 10 --> 
      * <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
            <!-- Windows 8.1 -->
            <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
            <!-- Windows Vista -->
            <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/> 
            <!-- Windows 7 -->
            <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
            <!-- Windows 8 -->
            <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
        </application> 
    </compatibility>
</assembly>

Ajoutez ces variables à vos sources :

  • SXS_MANIFEST_RESOURCE_ID=1
  • SXS_MANIFEST=foo.manifest
  • SXS_ASSEMBLY_NAME=Microsoft.Windows.Foo
  • SXS_ASSEMBLY_VERSION=1.0
  • SXS_ASSEMBLY_LANGUAGE_INDEPENDENT=1
  • SXS_MANIFEST_IN_RESOURCES=1

Pour Windows 10, les deux lignes ci-dessus marquées avec un astérisque (*) montrent comment cibler avec précision votre application pour la version Windows 10 du système d’exploitation. La manifeste de la .exe pour Windows 10 n’aura aucun impact lors de l’exécution sur les versions précédentes du système d’exploitation Windows. Vous pouvez également l’ajouter à votre fichier .rc si vous l’avez déjà défini. L’ajout de trustInfo n’est pas essentiel, mais il est fortement recommandé. Cela permet à votre .exe d’obtenir toujours la version correcte, que le système d’exploitation soit Windows 10 ou Windows 8.1.

Ressources