如何判断操作系统是Windows XP或更高版本?

26

我正在尝试操作 Environment.OSVersion.Version 对象,但无法确定哪个版本表示操作系统为Windows XP或更高版本(例如,我想排除Windows 2000、ME或之前的版本)。

3个回答

45

使用 System.OperatingSystem 对象,然后按主版本号和次版本号进行过滤。

我曾经使用过以下这些函数:

static bool IsWinXPOrHigher()
{
    OperatingSystem OS = Environment.OSVersion;
    return (OS.Platform == PlatformID.Win32NT) && ((OS.Version.Major > 5) || ((OS.Version.Major == 5) && (OS.Version.Minor >= 1)));
}

static bool IsWinVistaOrHigher()
{
    OperatingSystem OS = Environment.OSVersion;
    return (OS.Platform == PlatformID.Win32NT) && (OS.Version.Major >= 6);
}

如果操作系统是64位,PlatformID是否仍然是Win32NT? - AngryHacker
2
@AngryHacker 平台ID.Win32 = "操作系统为Windows NT或更高版本",所以是的。 - ParmesanCodice
1
我修改了IsWinXp的代码,以检查它是否为Windows XP或更高版本。Vista也是如此。 - AngryHacker

9

3
请注意,WinXP 32位版本为5.1;WinXP 64位版本为5.2。 - William Leara
这就是为什么你应该寻找你需要的东西而不是检查版本号的原因,也是为什么Win7的版本号是6.1而不是7.0。检查版本号很容易出错,并且并不总是能告诉你想知道的信息。 - Stewart

5

您不应该检查版本号,而是应该检查您需要的功能。例如,如果您需要特定的API(如LoadLibrary和GetProcAddress),则可以使用它们 - 这样,您就不会依赖于版本号。


鉴于依赖关系是他需要该版本的原因,这是一个非常好的想法。 - daramarak
你如何检查操作系统是否支持RegFree COM? - AngryHacker
尝试从清单中加载组件。如果不起作用,则平台不支持无需注册COM。 - Stewart
我对这个特定的答案有些犹豫。例如,如果有一个特定的API可以被检查(简单地),那么我确实同意检查该API是更好的方法。然而,我处于需要知道特定系统实用程序是否存在的情况下,这在从XP到Vista时发生了变化。我能想到的最干净的方法就是检查操作系统版本,而不是尝试启动一些不存在的进程并检查失败!如果我正在寻找的实用程序在版本检查后不存在,那么操作系统已经损坏了。 - monkey0506
然后检查实用程序是否存在。检查操作系统版本很容易出错,如果用户使用版本谎言来欺骗您的进程,则检查版本也无法告诉您想要知道的内容。 - Stewart

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接