我有一些场景,我想特别了解操作系统主要/次要版本和内部版本号等。
从Windows 8.1开始,GetVersion
和GetVersionEx
已被弃用,说明:
在Windows 8.1之后,[GetVersion / GetVersionEx可能会被更改或不可用于发布。相反,请使用版本助手功能]
version helper APIs没有人帮助我获取操作系统版本号,而是帮助我验证或了解我的版本是否与上述版本相同或更高。可以做些什么?
答案 0 :(得分:4)
API GetVersionEx()继续在Windows 8.1+中运行,但Microsoft已更改其功能。来自MSDN(强调我的):
随着Windows 8.1的发布,GetVersionEx API的行为 已经改变了它将为操作系统返回的值 版。现在 GetVersionEx函数返回的值取决于 关于应用程序如何表现。
Windows 8.1未显示的应用程序将返回Windows 8 操作系统版本值(6.2)。一旦申请表现出一个给定的 操作系统版本,GetVersionEx将始终返回版本 该应用程序在将来的版本中表现出来。表现出来 您的Windows 8.1应用程序请参阅定位您的 适用于Windows 8.1。
您需要做的是将适当的GUID添加到您的应用程序(.exe / .dll)二进制文件中(通过清单XML信息)。换句话说,如果您明确声明您的应用程序支持8.1,则GetVersionEx()将在Windows 8.1上运行时返回正确的信息。如果你不这样做,GetVersionEx()将欺骗你。
请参阅Targeting your application For Windows 8.1以获取GUID列表。 还covered here and here。
懒惰的GUID列表
{e2011457-1546-43c5-a5fe-008deee3d3f0}
{35138b9a-5d96-4fbd-8e2d-a2440225f93a}
{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}
{1f676c76-80e1-4239-95bb-83d0f6d0da78}
{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}
至于Windows Server 2019,我不确定是否已发布新的GUID。如果您了解更多,请发表评论!
答案 1 :(得分:2)
有一个名为GetProductInfo的新函数可以返回版本信息。
如果您要测试特定版本,则应使用VerifyVersionInfo
很容易创建一个结构来检查特定的操作系统版本是否正在运行。 VerifyVersionInfo采用版本结构,您可以轻松检查VER_GREATER_EQUAL和VER_LESS_EQUAL
另请注意,如果您在清单的兼容性部分中定义了正确支持的操作系统条目,则GetVersionEx不会位于Windows 8.1系统上。但它可能在于未来的操作系统版本!
请参阅Targeting your application For Windows 8.1以获取GUID列表。同样涵盖了here。
应用程序清单的GUID列表
{e2011457-1546-43c5-a5fe-008deee3d3f0}
{35138b9a-5d96-4fbd-8e2d-a2440225f93a}
{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}
{1f676c76-80e1-4239-95bb-83d0f6d0da78}
{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}
答案 2 :(得分:-9)
检查this article on codeproject.com,它适用于Windows 8:
1)下载 .DLL 并将其添加到您的项目中。
2)使用此代码获取操作系统信息:
StringBuilder sb = new StringBuilder(String.Empty);
sb.AppendLine("Operation System Information");
sb.AppendLine("----------------------------");
sb.AppendLine(String.Format("Name = {0}", OSVersionInfo.Name));
sb.AppendLine(String.Format("Edition = {0}", OSVersionInfo.Edition));
if (OSVersionInfo.ServicePack!=string.Empty)
sb.AppendLine(String.Format("Service Pack = {0}", OSVersionInfo.ServicePack));
else
sb.AppendLine("Service Pack = None");
sb.AppendLine(String.Format("Version = {0}", OSVersionInfo.VersionString));
sb.AppendLine(String.Format("ProcessorBits = {0}", OSVersionInfo.ProcessorBits));
sb.AppendLine(String.Format("OSBits = {0}", OSVersionInfo.OSBits));
sb.AppendLine(String.Format("ProgramBits = {0}", OSVersionInfo.ProgramBits));
textBox1.Text = sb.ToString();