Using the manifest kludge only delays the problem. When the next 8.x
version of Windows is released GetVersionEx will presumably resume lying
to Qt/your application about the Windows version you are running. Which
version it gives you is anyone's guess.
On 21/10/13 04:47, Raul Metsma wrote:
> Why not use the manifest workaround?
>
> <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
> <application>
> * <!-- Windows 8.1 -->
> * <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
>
> Raul
>
> On Oct 20, 2013, at 4:56 PM, MuldeR <[email protected]> wrote:
>
>> Hello.
>>
>> As you might have read, with Windows 8.1, the GetVersion(Ex) API has been
>> deprecated by Microsoft and will now pretend to be Windows 8.0 (NT v6.2),
>> even when running under Windows 8.1 (NT v6.3). And yes, officiallay and in
>> other API's, Windows 8.1 is NT v6.3.
>>
>> See here for details:
>> http://msdn.microsoft.com/en-us/library/windows/desktop/dn302074.aspx
>>
>> Microsoft says that they did this in order to prevent compatibility
>> problems. I think it is a horrible idea to break the API in that way. It is
>> also the reason why Qt happily detects Windows 8.1 as Windows 8. Actually Qt
>> should detect an “unknown” operating system, since there is no 8.1 (NT v6.3
>> )detection code yet - I have checked latest version in Git. But Qt detects
>> NT v6.2, thanks to Microsoft's GetVersion(Ex) hack. In other words:
>> QSysInfo::windowsVersion() reports wrong info, starting with (and probably
>> not limited to) Windows 8.1.
>>
>> So let's fix QSysInfo!
>>
>> I have pulled together a solution that is based on the VerifyVersionInfo()
>> API, which has not been broken, fortunately. Basically, we first call
>> GetVersionEx() to get the "fake" version as a starting point. Then we try to
>> increase the version numbers from there, calling VerifyVersionInfo() each
>> time in order to make sure we did not exceed the *real* version. End result
>> will be the maximum supported version, i.e. the *real* version number.
>>
>>
>> Code is here:
>> http://pastie.org/private/kkva8pkk7nzcmm8jjwstfa
>>
>> Tested on: Windows XP (RTM), Windows 7 SP-1, Windows 8.0, Windows 8.1
>>
>> (should work on Windows 2000 too, but I don't really care)
>>
>>
>> Output on Windows 7:
>>> (Fake) Windows Version: 6.1
>>> Trying to verify: 7.0 -->NO
>>> Trying to verify: 6.2 -->NO
>>> *Real* Windows Version: 6.1
>> Output on Windows 8.0:
>>>> (Fake) Windows Version: 6.2
>>>> Trying to verify: 7.0 -->NO
>>>> Trying to verify: 6.3 -->NO
>>>> *Real* Windows Version: 6.2
>> Output on Windows 8.1:
>>> (Fake) Windows Version: 6.2
>>> Trying to verify: 7.0 -->NO
>>> Trying to verify: 6.3 -->YES
>>> Trying to verify: 6.4 -->NO
>>> *Real* Windows Version: 6.3
>>
>> Regards,
>> MuldeR
>>
>> _______________________________________________
>> Development mailing list
>> [email protected]
>> http://lists.qt-project.org/mailman/listinfo/development
> _______________________________________________
> Development mailing list
> [email protected]
> http://lists.qt-project.org/mailman/listinfo/development
_______________________________________________
Development mailing list
[email protected]
http://lists.qt-project.org/mailman/listinfo/development