Tcl Source Code

View Ticket
Login
Ticket UUID: 651e828a525828c89dc2a77bb5ac260fd0a39e25
Title: Wrong Windows version reported for Windows 8.1
Type: Bug Version: 8.6.1
Submitter: apnadkarni Created on: 2014-01-30 15:55:18
Subsystem: 69. Other Assigned To: jan.nijtmans
Priority: 5 Medium Severity: Minor
Status: Closed Last Modified: 2014-02-03 15:18:01
Resolution: Fixed Closed By: jan.nijtmans
    Closed on: 2014-02-03 15:18:01
Description:
On Windows 8.1, tcl_platform(osVersion) is reported as 6.2 even though it is actually 6.3. This is due to a change in behaviour of the GetVersionEx Win32 API which reports 6.2 if the exe does not contain a manifest.

Jan has fixed this in the trunk by adding the appropriate manifest. However, this is not a permanent fix. When Windows 8.2 (or whatever) rolls around, the manifest will have to change AGAIN and existing tclsh would still be broken.

Moreover, the manifest fix only fixes tclsh and wish, not when the tcl dll is loaded from other executables.

Therefore, a better fix might be to use the undocumented RtlGetVersion function which returns the real OS version. It has the same interface as GetVersionEx (the returned struct is the same though typedef'ed differently), but has to be loaded dynamically from ntdll.dll. This will permanently solve the problem for future versions and all executables that load the tcl dll (unless Microsoft breaks that function in the future as well).

See http://wixtoolset.org/issues/4061/ and http://msdn.microsoft.com/en-us/library/windows/hardware/ff561910(v=vs.85).aspx
User Comments: jan.nijtmans added on 2014-02-03 15:18:01:

Fixed in core-8-5-branch [8aefc70fdb] and trunk [818d7d0f1a]