[rt.cpan.org #90807] Win32::GetOSVersion() broken in Windows 8.1 and Windows Server 2012 R2
[email protected] ("Tim Hoke via RT") Mon, 25 Nov 2013 12:38:32 -0500
| Newsgroups | perl.libwin32 |
|---|---|
| Message-ID | <[email protected]> |
Mon Nov 25 12:38:31 2013: Request 90807 was acted upon.
Transaction: Ticket created by thoke
Queue: Win32
Subject: Win32::GetOSVersion() broken in Windows 8.1 and Windows Server
2012 R2
Broken in: 0.48
Severity: (no value)
Owner: Nobody
Requestors: [email protected]
Status: new
Ticket <URL: https://rt.cpan.org/Ticket/Display.html?id=90807 >
From Microsoft: In Windows 8.1, the GetVersion(Ex) APIs have been deprecated. That means that while you can still call the APIs, if your app does not specifically target Windows 8.1, you will get Windows 8 versioning (6.2.0.0).
Here are just a few resources:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms724832(v=vs.85).aspx
http://msdn.microsoft.com/en-us/library/windows/desktop/ms724451(v=vs.85).aspx
http://msdn.microsoft.com/en-us/library/windows/desktop/dn302074(v=vs.85).aspx
This can be seen in practice on Windows Server 2012 R2 with Win32 vs Win32::OLE as follows:
---
use Win32;
use Win32::OLE;
my ( $desc, $major, $minor, $build, $id, undef, undef, $suitemask,
$producttype ) = Win32::GetOSVersion();
printf "%20s: %10s\n", "Win32 Version", "$major.$minor.$build";
my $wmi = Win32::OLE->GetObject( "WinMgmts://./root/cimv2" ) or die "Failed GetObject: $!\n";
my $list = $wmi->InstancesOf( "Win32_OperatingSystem" ) or die "Failed InstancesOf: $!\n";
for my $item ( Win32::OLE::in $list ) {
printf "%20s: %10s\n", "Win32::OLE Version", $item->{Version};
}
---
Win32 Version: 6.2.9200
Win32::OLE Version: 6.3.9600