Question

Je souhaite tirer parti des nouvelles fonctionnalités de la barre des tâches Windows 7 dans une application .NET et savoir ce que les internautes considèrent comme le meilleur moyen de rechercher les fonctionnalités Windows 7 dans .NET. Mon objectif est d’avoir un code distinct pour Windows XP et Windows 7.

Je ne suis pas trop fan de:

  • juste envelopper le code Windows 7 dans un essai try
  • si OS = " Windows 7 " Ensuite...

À moins bien sûr que ce soit ce que la plupart font. J'ai vraiment cherché partout une bonne approche mais sans succès. La bibliothèque d'encapsidation de code non géré de Microsoft semble supposer qu'elle fonctionne sous Windows 7 ...

Était-ce utile?

La solution

Je pense qu'il n'y a rien de mal avec si OS = "Windows 7 ". Bien sûr,

  • il devrait s'agir de si le système d'exploitation > = " Windows 7 & <; code
  • Pour ce faire, vérifiez Environment.OSVersion (Plate-forme et > = Version).

Si vous ne souhaitez pas encombrer votre code avec si (isWindows7) {...} , vous pouvez placer le code spécifique à la plate-forme dans une classe séparée. Par exemple, vous pouvez créer une interface

interface IOSSpecific {
    void AddToJumpList(...);
    ...
}

et deux implémentations de cette classe, une pour > = Win 7 et une pour les autres (qui fait des choses différentes ou rien du tout). Lorsque votre application démarre, vous instanciez une variable globale de type IOSSpecific avec l'une ou l'autre des implémentations.

Autres conseils

Je m'attendrais à ce que vous le fassiez:

if ( Environment.OSVersion.Platform == windows7Id)
{
    // win7 stuff
}

Je ne sais pas quelle est la valeur de l'ID Windows7.

Je pose généralement cette question pour décider quel objet je crée à partir de mes usines pour prendre en charge différentes plates-formes. Mieux vaut les saupoudrer partout dans la base de code ou attraper des exceptions.

Si vous utilisez une bibliothèque wrapper telle que Code Pack ( http://code.msdn.microsoft.com / WindowsAPICodePack ), il vérifie la version pour vous. Vous appelez les méthodes de la bibliothèque et vous obtiendrez une exception PlatformNotSupportedException si vous essayez quelque chose qui ne se trouve pas sur le système d’exploitation lorsque vous exécutez.

Vous pouvez également intercepter EntryPointNotFoundException si vous êtes en mode P / Invocation dans une DLL Windows. Cette approche est la meilleure lorsque vous faites votre propre interop, car des fonctionnalités peuvent être ajoutées (par les mises à jour et les service packs) dans des années dans un système d'exploitation de niveau inférieur.

Avec ces deux options, vous pouvez mettre en cache une sorte d'indicateur vous rappelant qu'il n'y a pas de barre des tâches ni de bibliothèques ou que vous n'avez aucune fonctionnalité, de manière à éviter les erreurs de lancement et de capture de l'exception.

Si vous tenez à vérifier votre propre version et à voir le système d'exploitation sur lequel vous vous trouvez, s'il vous plaît , souvenez-vous de la magie de > =. Vous savez combien de code teste la version est exactement XP SP2, puis une boîte de dialogue indiquant "Nécessite XP SP2 ou une version ultérieure". Une tonne . En fait, c’est la raison pour laquelle la version majeure de Win7 est 6, de sorte que tout le code vérifiant «" égal à 6». fonctionnerait toujours. Ne sois pas ce mec.

if (Environment.OSVersion.Version.Major >= 6)
{
   if (Environment.OSVersion.Version.Minor >= 1)
     // Do Win7 thing
   else
     // Do Vista thing
}
else if (Environment.OSVersion.Version.Major >= 5)
 // Do XP thing

Vous pouvez trouver tous les nombres majeurs / mineurs à http://msdn.microsoft.com/en-us/library/ms724832%28VS.85%29.aspx

Kate

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top