Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

TOSVersion gives wrong result

I have client 64 bit Windows 7 installed on his computer. Below same codes gives different results on a dummy application and in my application. My application is group project and have 25 packages.

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)

What may be causing problem?

Manifest file settings Auto Generate. There is not a .manifest file but I could found "supportedOS" entry in .res file in both project. Both of them have same content like below:

<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>
like image 304
Enes Köroğlu Avatar asked Dec 20 '17 12:12

Enes Köroğlu


1 Answers

Likely cause is that a compatibity fix (a shim) is applied to the executable on the client's computer; specifically the WinXPSP3VersionLie fix. TOSVersion record uses GetVersionEx to determine the OS version in its class constructor, which is effected by the shim as documented.

One way to verify is to examine the event log. An event will be logged either it's the user who's applying the fix through program properties dialog (support article) or the Program Compatibility Assistant, or through Application Compatibility Toolkit. You can search your executable's name in

Event Log\Application and Services\Microsoft\Windows\Application-Experience\Program-Telemetry
like image 99
Sertac Akyuz Avatar answered Nov 15 '22 08:11

Sertac Akyuz