TOSVersion 给出了错误的结果

TOSVersion gives wrong result

我在他的计算机上安装了 64 位客户端 Windows 7。下面相同的代码在虚拟应用程序和我的应用程序中给出了不同的结果。我的申请是小组项目,有 25 个包。

TOSVersion.Name: Windows 7
TOSVersion.ToString: Windows 7 Service Pack 1 (Version 6.1, Build 7601, 64-bit Edition)

TOSVersion.Name: Windows XP
TOSVersion.ToString: Windows XP Service Pack 3 (Version 5.1, Build 2600, 64-bit Edition)

可能导致问题的原因是什么?

清单文件设置自动生成。没有 .manifest 文件,但我可以在两个项目的 .res 文件中找到 "supportedOS" 条目。它们都具有如下相同的内容:

<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> 
    <application> 
        <!--The ID below indicates app support for Windows Vista -->
        <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/> 
        <!--The ID below indicates app support for Windows 7 -->
        <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
        <!--The ID below indicates app support for Windows 8 -->
        <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
        <!--The ID below indicates app support for Windows 8.1 -->
        <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
        <!--The ID below indicates app support for Windows 10 -->
        <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>          
    </application> 
</compatibility>

可能的原因是兼容性修复 (a shim) is applied to the executable on the client's computer; specifically the WinXPSP3VersionLie 修复。 TOSVersion 记录使用 GetVersionEx 来确定其 class 构造函数中的 OS 版本,它受垫片影响 documented.

一种验证方法是检查事件日志。通过程序属性对话框 (support article) or the Program Compatibility Assistant, or through Application Compatibility Toolkit) 应用修复程序的用户将记录一个事件。您可以在

中搜索可执行文件的名称
Event Log\Application and Services\Microsoft\Windows\Application-Experience\Program-Telemetry