http://msdn.microsoft.com/en-us/library/windows/desktop/dn302074.aspx

http://tunps.com/getversionex-on-windows-8-1-return-6-2-9200

某程序需要判断当前Windows系统的版本号。Windows系统的版本号格式为:majorVersion.minorVersion.BuildNumber.

Windows 8 RTM的版本号的6.2.9200 Windows 8.1 Preview的版本好是6.3.9431

使用以下代码在Win8下面运行正常的显示为6.2.9200 , 但是接下来在Win8.1下面测试尽然还是6.2.9200。
而通过Win8.1自带的命令行systeminfo(采用WMI方式)返回的是正确的版本号

google了一下,MSDN论坛上有个帖子遇到同样的问题。实际上这个问题并非bug,而是微软有意为之。
如果程序的目标运行平台不需要支持Win8.1,那么GetVersion(Ex)就给你返回6.2,
除非通过App manifests方式指定程序支持Win8.1系统:

<exe>.manifest
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
    <assemblyIdentity
        type="win32"
        name=SXS_ASSEMBLY_NAME
        version=SXS_ASSEMBLY_VERSION
        processorArchitecture=SXS_PROCESSOR_ARCHITECTURE
    />
    <description> my app exe </description>
    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
        <security>
            <requestedPrivileges>
                <requestedExecutionLevel
                    level="asInvoker"
                    uiAccess="false"
                /> 
            </requestedPrivileges>
        </security>
    </trustInfo>
    <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
        <application>
         *  <!-- Windows 8.1 -->
         *  <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
            <!-- Windows Vista -->
            <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
            <!-- Windows 7 -->
            <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
            <!-- Windows 8 -->
            <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
        </application>
    </compatibility>
</assembly>

在Win8.1系统以后GetVersion(Ex)被放到兼容层(shim)里面,这样GetVersion(Ex)并不一定会返回系统真实的版本号。

取而代之可以采用VersionHelpers方式获取真实的系统版本号。

C++
#include <VersionHelpers.h>

    if (!IsWindows8OrGreater())
    {
       MessageBox(NULL, "You need at least Windows 8", "Version Not Supported", MB_OK);
    }

最新文章

  1. 一位资深开发的个人经历 【转自百度贴吧 java吧 原标题 4年java 3年产品 现在又开始做android了】
  2. UILabel的使用
  3. JAVA软件开发职责
  4. hihoCoder挑战赛14 -1223
  5. SoapUI中Groovy的实用方法
  6. 基于Hadoop生态圈的数据仓库实践 —— ETL
  7. the private key for is not installed on this mac
  8. IOS算法(三)之插入排序
  9. Grunt 之 Connect
  10. JAVAEE——Mybatis第一天:入门、jdbc存在的问题、架构介绍、入门程序、Dao的开发方法、接口的动态代理方式、SqlMapConfig.xml文件说明
  11. 如何把遗留的Java应用托管在Service Fabric中
  12. .NET面试题01-值类型与引用类型
  13. SQL SERVER启动步骤
  14. Confluence 6 协同编辑问题解决
  15. PAT A1026 Table Tennis (30 分)——队列
  16. Java实现给定字符串的倒序输出
  17. Python日期格式化知识
  18. mybatis相对于ibatis的优势
  19. rsync同步常用命令[转载]
  20. RocEDU.阅读.写作《乌合之众》(一)

热门文章

  1. .net 打开Excel文档并转为DataTable
  2. 队列&lt;一&gt;
  3. 2017-12-24 自定义view相关学习
  4. bat文件命令
  5. noip第13课作业
  6. 1.java面向对象编程三大特性之封装
  7. codeforces 434D
  8. numpy和pandas和matplotlib用法
  9. MAC系统下用Idea创建spring boot工程 基于maven
  10. Oracle.ManagedDataAccess.Client.OracleException:“ORA-00936: 缺失表达式”