区分Windows版本的最简单方法是什么?

3

1
这在你发布的文章中吗?wProductType区分客户端和服务器。 - James Barrass
3个回答

4
那个你链接的页面不是已经给出了答案吗?
Windows Server 2008  OSVERSIONINFOEX.wProductType != VER_NT_WORKSTATION
Windows Vista        OSVERSIONINFOEX.wProductType == VER_NT_WORKSTATION 

只需将wProductType成员与VER_NT_WORKSTATION进行比较。

编辑

看起来没有办法在不使用P/Invoke的情况下获取此信息。 System.Environment.OSVersion没有公开此级别的详细信息,尽管在mscorlib中的Microsoft.Win32命名空间中有一个internal static class Win32Native,但从反汇编中我可以看出,没有任何东西使用或公开wProductType

我找到了(但尚未尝试)这个pinvoke.net页面


似乎需要使用P/Invoke。有没有避免使用P/Invoke的解决方案? - satya
谢谢AakashM。我也找不到一个没有P/Invoke的方法。无论如何,感谢您的帮助。 - satya
可以通过WMI实现,而无需使用PInvoke。请参见下面的答案。 - Alex_P

3

对于服务器,

OSVERSIONINFOEX.wProductType != VER_NT_WORKSTATION

适用于工作站

OSVERSIONINFOEX.wProductType == VER_NT_WORKSTATION

1

您可以使用WMI来查找Windows版本以及各种其他系统信息。

以下是获取版本字符串的方法:

var osDetails = new System.Management.ManagementObjectSearcher("SELECT * FROM Win32_OperatingSystem").Get().OfType<System.Management.ManagementObject>().First();
string version = osDetails.GetPropertyValue("Caption") as string;

这将返回一个类似于“Microsoft Windows XP Professional”的字符串。

除了标题之外,还有更多的属性可用于检索版本号、版本、架构等:

http://msdn.microsoft.com/en-us/library/aa394239(v=VS.85).aspx


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