如果您使用像 Code Pack ( http://code.msdn.microsoft.com/WindowsAPICodePack ) 这样的包装库,它会为您检查版本。您继续调用库方法,如果您在运行时尝试不在操作系统上的东西,它将抛出 PlatformNotSupportedException。
如果您正在 P/Invoking 某些 Windows DLL,您还可以捕获 EntryPointNotFoundException。这是进行您自己的互操作时的最佳方法,因为功能可能会在几年后(通过更新和服务包)添加到低级操作系统中。
使用这两者,您可以缓存某种标志,提醒您没有任务栏或没有库或您没有任何功能,以节省抛出和捕获异常的性能命中。
如果您坚持自己进行版本检查并查看您使用的操作系统,请记住 >= 的魔力。您知道有多少代码可以测试版本正是XP SP2,然后显示“需要 XP SP2 或更高版本”的消息框吗?一吨。事实上,这就是 Win7 的主要版本是 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找到所有主要/次要数字
凯特