如何使用C#获取代码运行的操作系统名称?

3
我有一个C#应用程序,希望在Win 7和Win XP上运行。在分发MSI和EXE给客户之前,我需要在C#源代码中检查操作系统名称。我的代码想要检查的是32位Windows XP还是64位Windows 7,不涉及更细节的版本信息。请问我能得到帮助吗?需要考虑的操作系统是64位Win7和32位Win XP。

你也关心Vista吗?或者一些更为精细的特定区域版本,例如不包括媒体播放器的版本。 - Rowland Shaw
请查看此答案这里 - Madeleine
不,Windows Vista并未被考虑。 - codeLover
7个回答

4
你可以使用 WMI 获取操作系统的友好名称。
ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT Caption FROM Win32_OperatingSystem");
String operatingSystem = String.Empty;

foreach (ManagementObject query in searcher.Get())
{
   operatingSystem = query["Caption"].ToString();
   break;
}

你可以使用WMI Code Creator,这是微软开发的一款非常好用的工具,可以生成WMI查询语句。

3

2

是的,您说得对。Environment.OSVersion可以给出操作系统版本信息,但如何知道它是Windows XP还是7呢?

您需要比较版本号,以下是相关列表:

Windows XP 5.1.2600 当前版本SP3

Windows XP专业版x64版 5.2.3790

Windows Vista 6.0.6000 当前版本通过SP2更改为6.0.6002

Windows 7 6.1.7600

更多信息请参见Windows操作系统版本号

if (Environment.OSVersion.Version.ToString().Equals("5.1.2600"))
{
    // windows xp 32-Bit with service pack 3
}
else if (Environment.OSVersion.Version.ToString().Equals("  6.1.7600"))
{
    // windows 7
}

无论有多少个版本,我只想检查操作系统是32位的WINDOWS XP还是64位的WINDOWS 7。我不想涉及版本细节。请问我能得到帮助吗? - codeLover
@engineerMaster 是的,你可以比较版本来了解操作系统是XP还是Windows 7。 - Waqas Raja
7是6.1(主版本6,次版本1),而XP是5.1。请参见此处http://msdn.microsoft.com/en-us/library/ms724834%28VS.85%29.aspx。虽然您需要解析结果并摆脱构建,但如果您不想包括Server 2008 R2,则还需要检查产品类型(不知道如何在.NET中执行此操作)。 - Voo

1

0

请查看Environment类。它包含了你所需的方法。

简短回答:

Console.WriteLine("OSVersion: {0}", Environment.OSVersion.ToString());

0

0

你可以从注册表中获取操作系统名称。

string productName = Registry.GetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion", "ProductName", "").ToString(); Console.WriteLine(productName);

输出: //对于我的Windows 10,我得到了

Windows 10 Enterprise

尝试使用此方法获取Windows产品名称


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