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

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

【问题讨论】:

    标签: c# windows .net-2.0 windows-xp version


    【解决方案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。我能想到的最干净的检查方法就是检查操作系统版本,而不是尝试启动一些不存在的进程并检查失败!如果我正在寻找的实用程序在版本检查后不存在,则操作系统无论如何都已损坏。
    • 然后检查该实用程序是否存在。检查操作系统版本很容易出错,如果用户用一个版本来填充你的进程,那么检查版本并不能告诉你你想知道什么。
    猜你喜欢
    • 2013-03-18
    • 2016-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-06
    相关资源
    最近更新 更多