| 361 | return None |
| 362 | |
| 363 | def win32_ver(release='', version='', csd='', ptype=''): |
| 364 | try: |
| 365 | from sys import getwindowsversion |
| 366 | except ImportError: |
| 367 | return release, version, csd, ptype |
| 368 | |
| 369 | winver = getwindowsversion() |
| 370 | try: |
| 371 | major, minor, build = map(int, _syscmd_ver()[2].split('.')) |
| 372 | except ValueError: |
| 373 | major, minor, build = winver.platform_version or winver[:3] |
| 374 | version = '{0}.{1}.{2}'.format(major, minor, build) |
| 375 | |
| 376 | release = (_WIN32_CLIENT_RELEASES.get((major, minor)) or |
| 377 | _WIN32_CLIENT_RELEASES.get((major, None)) or |
| 378 | release) |
| 379 | |
| 380 | # getwindowsversion() reflect the compatibility mode Python is |
| 381 | # running under, and so the service pack value is only going to be |
| 382 | # valid if the versions match. |
| 383 | if winver[:2] == (major, minor): |
| 384 | try: |
| 385 | csd = 'SP{}'.format(winver.service_pack_major) |
| 386 | except AttributeError: |
| 387 | if csd[:13] == 'Service Pack ': |
| 388 | csd = 'SP' + csd[13:] |
| 389 | |
| 390 | # VER_NT_SERVER = 3 |
| 391 | if getattr(winver, 'product_type', None) == 3: |
| 392 | release = (_WIN32_SERVER_RELEASES.get((major, minor)) or |
| 393 | _WIN32_SERVER_RELEASES.get((major, None)) or |
| 394 | release) |
| 395 | |
| 396 | try: |
| 397 | try: |
| 398 | import winreg |
| 399 | except ImportError: |
| 400 | import _winreg as winreg |
| 401 | except ImportError: |
| 402 | pass |
| 403 | else: |
| 404 | try: |
| 405 | cvkey = r'SOFTWARE\Microsoft\Windows NT\CurrentVersion' |
| 406 | with winreg.OpenKeyEx(winreg.HKEY_LOCAL_MACHINE, cvkey) as key: |
| 407 | ptype = winreg.QueryValueEx(key, 'CurrentType')[0] |
| 408 | except OSError: |
| 409 | pass |
| 410 | |
| 411 | return release, version, csd, ptype |
| 412 | |
| 413 | |
| 414 | def _mac_ver_xml(): |