diff options
author | Brian Curtin <brian.curtin@gmail.com> | 2010-05-06 03:09:10 (GMT) |
---|---|---|
committer | Brian Curtin <brian.curtin@gmail.com> | 2010-05-06 03:09:10 (GMT) |
commit | e7837354cd1b145672b3d68915956ff738961fcc (patch) | |
tree | 7d77e0ba925688c8c7adbeb993bf5f215c00190d | |
parent | f870d8736ad15094b9f5f1f6a51800a562d3ecb1 (diff) | |
download | cpython-e7837354cd1b145672b3d68915956ff738961fcc.zip cpython-e7837354cd1b145672b3d68915956ff738961fcc.tar.gz cpython-e7837354cd1b145672b3d68915956ff738961fcc.tar.bz2 |
Merged revisions 80859 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/py3k
................
r80859 | brian.curtin | 2010-05-05 22:05:50 -0500 (Wed, 05 May 2010) | 12 lines
Merged revisions 80857 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r80857 | brian.curtin | 2010-05-05 21:54:44 -0500 (Wed, 05 May 2010) | 5 lines
Fix #7863. Properly identify Windows 7 and Server 2008 R2.
Removed various unused code and added a way to correctly determine
server vs. workstation via the registry.
........
................
-rwxr-xr-x | Lib/platform.py | 48 |
1 files changed, 34 insertions, 14 deletions
diff --git a/Lib/platform.py b/Lib/platform.py index b525695..be49f89 100755 --- a/Lib/platform.py +++ b/Lib/platform.py @@ -576,12 +576,19 @@ def win32_ver(release='',version='',csd='',ptype=''): VER_PLATFORM_WIN32_WINDOWS = 1 VER_PLATFORM_WIN32_NT = 2 VER_NT_WORKSTATION = 1 + VER_NT_SERVER = 3 + REG_SZ = 1 # Find out the registry key and some general version infos - maj,min,buildno,plat,csd = GetVersionEx() + winver = GetVersionEx() + maj,min,buildno,plat,csd = winver version = '%i.%i.%i' % (maj,min,buildno & 0xFFFF) - if csd[:13] == 'Service Pack ': - csd = 'SP' + csd[13:] + if hasattr(winver, "service_pack"): + if winver.service_pack != "": + csd = 'SP%s' % winver.service_pack_major + else: + if csd[:13] == 'Service Pack ': + csd = 'SP' + csd[13:] if plat == VER_PLATFORM_WIN32_WINDOWS: regkey = 'SOFTWARE\\Microsoft\\Windows\\CurrentVersion' # Try to guess the release name @@ -610,20 +617,33 @@ def win32_ver(release='',version='',csd='',ptype=''): else: release = 'post2003' elif maj == 6: - if min == 0: - # Per http://msdn2.microsoft.com/en-us/library/ms724429.aspx + if hasattr(winver, "product_type"): + product_type = winver.product_type + else: + product_type = VER_NT_WORKSTATION + # Without an OSVERSIONINFOEX capable sys.getwindowsversion(), + # or help from the registry, we cannot properly identify + # non-workstation versions. try: - productType = GetVersionEx(1)[8] - except TypeError: - # sys.getwindowsversion() doesn't take any arguments, so - # we cannot detect 2008 Server that way. - # XXX Add some other means of detecting 2008 Server ?! + key = RegOpenKeyEx(HKEY_LOCAL_MACHINE, regkey) + name, type = RegQueryValueEx(key, "ProductName") + # Discard any type that isn't REG_SZ + if type == REG_SZ and name.find("Server") != -1: + product_type = VER_NT_SERVER + except WindowsError: + # Use default of VER_NT_WORKSTATION + pass + + if min == 0: + if product_type == VER_NT_WORKSTATION: release = 'Vista' else: - if productType == VER_NT_WORKSTATION: - release = 'Vista' - else: - release = '2008Server' + release = '2008Server' + elif min == 1: + if product_type == VER_NT_WORKSTATION: + release = '7' + else: + release = '2008ServerR2' else: release = 'post2008Server' else: |