如何检测正在运行的Windows版本?

时间:2015-09-17 08:38:41

标签: c# windows

我有一个以Word加载项运行的应用程序。 (VSTO)。

它运行在世界各地的许多PC上。在某些情况下,我需要解决问题(显然是远程),并有一个报告机制,告诉我哪个Windows操作系统正在运行 - 我在.NET中使用Environment.OSVersion。至少它直到Windows 10才开始。

MSDN(Targeting your application for Windows)上有一篇关于创建应用程序清单的文章,该清单将允许返回正确的版本。

但我的应用程序是一个DLL,而不是EXE,因此不能真正适应该文章中提到的XML代码。

没有办法只问Windows,"你是什么版本的?真的,如果你承认真正的版本,我不会哭泣。

或者是注册表中的条目还是什么?

4 个答案:

答案 0 :(得分:1)

如果您不希望使用WMI,则可以使用GetVersionEx函数RtlGetVersion的SDK对应版本。他们不撒谎。

如果使用.NET 5.0或Core,则Environment.OSVersion将报告Windows的实际版本。

除了其他主题的答案之外,我还发布了有关此主题的更多详细信息: https://stackoverflow.com/a/64804643/2240196

编辑:根据要求添加了示例代码。 (您可能不需要全部)

pip freeze --local

答案 1 :(得分:0)

private String GetOSVersion()
{
    var wmiEnum = new ManagementObjectSearcher("root\\CIMV2", "SELECT Version FROM  Win32_OperatingSystem").Get().GetEnumerator();
    wmiEnum.MoveNext();
    return wmiEnum.Current.Properties["Version"].Value as String;
}

在我的W7系统上返回6.1.7601,在我的Server 2016系统上返回10.0.14393。

无需添加目标清单。

答案 2 :(得分:-1)

WMI是执行此类操作的最佳方式您可以使用它来检索操作系统信息:

ManagementObjectSearcher objMOS = 
       new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM  Win32_OperatingSystem");

OS.Name = ((string)objMOS["Caption"]).Trim();
OS.Version = (string)objMOS["Version"];
OS.MaxProcessCount = (uint)objMOS["MaxNumberOfProcesses"];
OS.MaxProcessRAM = (ulong)objMOS["MaxProcessMemorySize"];
OS.Architecture = (string)objMOS["OSArchitecture"];
OS.SerialNumber = (string)objMOS["SerialNumber"];
OS.Build = ((string)objMOS["BuildNumber"]).ToUint();

这可以为您获取操作系统详细信息。

答案 3 :(得分:-1)

您可以尝试GetVersionEx Win32 API。

https://msdn.microsoft.com/en-us/library/windows/desktop/ms724451(v=vs.85).aspx

请注意,Windows 10实际上是版本6.4。 Ver 6.0是Vista,6.1 - 7,6.2 - 8.