题
我想利用新的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
凯特