我有一个以Word加载项运行的应用程序。 (VSTO)。
它运行在世界各地的许多PC上。在某些情况下,我需要解决问题(显然是远程),并有一个报告机制,告诉我哪个Windows操作系统正在运行 - 我在.NET中使用Environment.OSVersion
。至少它直到Windows 10才开始。
MSDN(Targeting your application for Windows)上有一篇关于创建应用程序清单的文章,该清单将允许返回正确的版本。
但我的应用程序是一个DLL,而不是EXE,因此不能真正适应该文章中提到的XML代码。
没有办法只问Windows,"你是什么版本的?真的,如果你承认真正的版本,我不会哭泣。
或者是注册表中的条目还是什么?
答案 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.