我想利用新的Windows7栏的功能中的一个。网应用程序,并想知道什么是人们认为是最好的方式来检查Windows7功能。网。我的目标是,以具有不同的代码,用于Windows XP和Windows7。

我不overally热衷于:

  • 只是包装Windows7码在尝试追赶
  • 如果OS="Windows7",然后...

当然,除非这个是什么大多数正在做的事情。我真的必须猎杀无处不在对于一个良好的做法,但没有成功。Microsoft管理的代码包装库似乎只是假设它是Windows上运行的7...

有帮助吗?

解决方案

我觉得没有错 if OS = "Windows 7".当然,

  • 它应该是 if OS >= "Windows 7" (因此,它不断在Windows7.1或什么的将是继任者)和
  • 它应该做的检查 环境。OSVersion (平台和>=版)。

如果你不想弄乱你的代码 if (isWindows7) {...}, 你可能想把该平台特定的代码成一个单独的类。例如,您可以创建一个接口

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

和两个实现这一类的,一个用于>=赢得7和一个其他人(其中不同的东西或者什么也没有).当你的应用程序的开始,你的实例一些全球性变量的类型 IOSSpecific 与两个实现。

其他提示

我希望你做的事:

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

不知道什么价值的Windows7id虽然。

我通常要求这一问题,以决定哪一个对象我创建从我的工厂,以支持不同的平台。比洒这些所有的码基地或捕例外情况。

如果您使用的包装库码组(http://code.msdn.microsoft.com/WindowsAPICodePack )它的版本检查你。你先走一步,呼吁图书馆的方法,它会投掷一PlatformNotSupportedException如果你尝试的东西,这不是在操作系统当你捉迷藏.

你还可以赶上EntryPointNotFoundException如果你P/援引入一些Windows DLL。这是最好的做法当做你自己的互操作的,因为功能可能会加入(通过更新和服务包)年,从现在到下级操作系统。

与这两个,你可以缓存的某种标志,提醒你,没有任务栏或没有图书馆或者你没有任何的功能,从而拯救性命的投掷和醒目的例外。

如果你坚持做你自己版本的检查,看看你是什么操作系统, 还记得魔法的>=.你知道有多少代码就在那里测试版本是 到底 XP sp-2和随后提出了一个信息框中说,"需要XP sp-2或以后"?一个 .事实上,这就是为什么主要版本的windows7资是6--以使所有代码检查"等于6"将仍然有效。不是那个家伙。

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

你可以找到所有主要的/小的数字 http://msdn.microsoft.com/en-us/library/ms724832%28VS.85%29.aspx

凯特

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top