2009-12-01 5 views
1

Je souhaite tirer parti de la nouvelle fonctionnalité de la barre des tâches de Windows 7 dans une application .NET et souhaiter savoir ce que les utilisateurs pensent être le meilleur moyen de vérifier les fonctionnalités de Windows 7 dans .NET. Mon but est d'avoir un code distinct pour Windows XP et Windows 7..NET pour Windows 7

Je ne suis pas Overally vif sur:

  • emballage juste le code de Windows 7 dans une prise d'essai
  • si OS = "Windows 7" Alors ...

À moins bien sûr que c'est ce que font la plupart des gens. J'ai vraiment chassé partout pour une bonne approche mais sans succès. La bibliothèque wrapper de code non managé Microsoft semble simplement supposer qu'il fonctionne sur Windows 7 ...

Répondre

4

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

  • il devrait être if OS >= "Windows 7" (afin qu'il ne se casse pas dans Windows 7.1 ou quoi que sera le successeur) et
  • Il est à être fait en vérifiant Environment.OSVersion (plate-forme et> = version).

Si vous ne voulez pas encombrer votre code avec if (isWindows7) {...}, vous pouvez mettre le code spécifique à la plateforme dans une catégorie distincte. Fo exemple r, vous pouvez créer une interface

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

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

2

Je vous attendre à faire:

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

Ne sais pas quelle valeur l'identifiant Windows7 est bien.

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

1

Si vous utilisez une bibliothèque de wrapper comme Code Pack (http://code.msdn.microsoft.com/WindowsAPICodePack), elle vérifie la version pour vous. Vous allez en avant et appelez les méthodes de bibliothèque et il lancera une exception PlatformNotSupportedException si vous essayez quelque chose qui n'est pas sur le système d'exploitation lorsque vous exécutez.

Vous pouvez également capturer EntryPointNotFoundException si vous appelez P/Invoke dans une DLL Windows. C'est la meilleure approche lorsque vous faites votre propre interop, parce que la fonctionnalité peut être ajoutée (par des mises à jour et des service packs) des années à partir de maintenant dans le système d'exploitation de niveau inférieur. Avec les deux, vous pouvez mettre en cache un type d'indicateur qui vous rappelle qu'il n'y a pas de barre des tâches ou qu'il n'y a pas de bibliothèques ou que vous n'avez aucune fonctionnalité, afin de sauver l'impact de lancer et d'attraper l'exception .

Si vous insistez pour faire votre propre vérification de version et voir sur quel OS vous êtes, veuillez se souvenir de la magie de> =.Vous savez combien de code est là-bas que les tests de la version est exactement XP SP2, puis met en place une boîte de message disant "XP Nécessite XP ou plus tard"? A ton. En fait, c'est pourquoi la version majeure pour Win7 est 6 - de sorte que tout le code de vérification pour "é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 numéros majeurs/mineurs à http://msdn.microsoft.com/en-us/library/ms724832%28VS.85%29.aspx

Kate

+0

En fait, ce code va faire la bonne chose pour Vista 7.0, 8.0 et d'autres versions mythiques futures. Rats, vérification de version est difficile! Ne vérifiez la version mineure que lorsque vous connaissez exactement la version majeure. –