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

Posted

技术标签:

【中文标题】如何判断操作系统是 Windows XP 还是更高版本?【英文标题】:How to tell if the OS is Windows XP or higher? 【发布时间】:2011-02-13 12:23:31 【问题描述】:

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

【问题讨论】:

【参考方案1】:

使用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 PlatformID.Win32 = "操作系统是 Windows NT 或更高版本。" 所以是的。 我更改了 IsWinXp 的代码以检查它是 Windows XP 还是更高版本。与 Vista 相同。【参考方案2】:

检查Major 属性是否大于或等于5,如果为5,则Minor 至少为1。(XP 为5.1,2003 为5.2,Vista/2008 为6.0)。

List of Windows Version Numbers on MSDN.

【讨论】:

注意WinXP 32位是5.1版; WinXP 64 位是 5.2 版。 这就是为什么您应该寻找您需要的东西而不是检查版本号的原因,以及为什么 Win7 是 6.1 版而不是 7.0 版的原因。检查版本号很容易出错,而且并不总是告诉你你想知道什么。【参考方案3】:

您不应该检查版本号。相反,您应该检查您需要的功能。如果它是您所追求的特定 API,例如 LoadLibrary 和 GetProcAddress - 这样,您就不会依赖于版本号。

【讨论】:

鉴于依赖是他需要版本的原因,这是一个非常好的主意。 如何检查操作系统是否支持 RegFree COM? 尝试从你的清单中加载一个组件。如果不行,说明平台不支持regfree COM 我对这个特定的答案有些不知所措。例如,如果有一个特定的 API 可以(简单地)检查,那么我同意检查该 API 确实是更好的途径。但是,我需要知道是否存在特定的系统实用程序,它从 XP 更改为 Vista。我能想到的最干净的检查方法就是检查操作系统版本,而不是尝试启动一些不存在的进程并检查失败!如果我正在寻找的实用程序在版本检查后不存在,则操作系统无论如何都已损坏。 然后检查该实用程序是否存在。检查操作系统版本很容易出错,如果用户用一个版本来填充你的进程,那么检查版本并不能告诉你你想知道什么。

以上是关于如何判断操作系统是 Windows XP 还是更高版本?的主要内容,如果未能解决你的问题,请参考以下文章

Delphi 4 Pro 能否在 Windows XP(或更高版本)上可靠地安装和使用?

Wix Toolset CustomAction 用于确定操作系统是 windows 7/xp 家庭版还是入门版,并显示消息不是

XP和VISTA区别?

java 如何判断操作系统是Linux还是Windows

windows xp sp3 是32位系统还是64位系统?

windows xp sp2