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. ........
This commit is contained in:
parent
3ce72a21c9
commit
a8538a504f
|
@ -596,10 +596,17 @@ def win32_ver(release='',version='',csd='',ptype=''):
|
||||||
VER_PLATFORM_WIN32_WINDOWS = 1
|
VER_PLATFORM_WIN32_WINDOWS = 1
|
||||||
VER_PLATFORM_WIN32_NT = 2
|
VER_PLATFORM_WIN32_NT = 2
|
||||||
VER_NT_WORKSTATION = 1
|
VER_NT_WORKSTATION = 1
|
||||||
|
VER_NT_SERVER = 3
|
||||||
|
REG_SZ = 1
|
||||||
|
|
||||||
# Find out the registry key and some general version infos
|
# 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)
|
version = '%i.%i.%i' % (maj,min,buildno & 0xFFFF)
|
||||||
|
if hasattr(winver, "service_pack"):
|
||||||
|
if winver.service_pack != "":
|
||||||
|
csd = 'SP%s' % winver.service_pack_major
|
||||||
|
else:
|
||||||
if csd[:13] == 'Service Pack ':
|
if csd[:13] == 'Service Pack ':
|
||||||
csd = 'SP' + csd[13:]
|
csd = 'SP' + csd[13:]
|
||||||
if plat == VER_PLATFORM_WIN32_WINDOWS:
|
if plat == VER_PLATFORM_WIN32_WINDOWS:
|
||||||
|
@ -630,20 +637,33 @@ def win32_ver(release='',version='',csd='',ptype=''):
|
||||||
else:
|
else:
|
||||||
release = 'post2003'
|
release = 'post2003'
|
||||||
elif maj == 6:
|
elif maj == 6:
|
||||||
if min == 0:
|
if hasattr(winver, "product_type"):
|
||||||
# Per http://msdn2.microsoft.com/en-us/library/ms724429.aspx
|
product_type = winver.product_type
|
||||||
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 ?!
|
|
||||||
release = 'Vista'
|
|
||||||
else:
|
else:
|
||||||
if productType == VER_NT_WORKSTATION:
|
product_type = VER_NT_WORKSTATION
|
||||||
|
# Without an OSVERSIONINFOEX capable sys.getwindowsversion(),
|
||||||
|
# or help from the registry, we cannot properly identify
|
||||||
|
# non-workstation versions.
|
||||||
|
try:
|
||||||
|
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'
|
release = 'Vista'
|
||||||
else:
|
else:
|
||||||
release = '2008Server'
|
release = '2008Server'
|
||||||
|
elif min == 1:
|
||||||
|
if product_type == VER_NT_WORKSTATION:
|
||||||
|
release = '7'
|
||||||
|
else:
|
||||||
|
release = '2008ServerR2'
|
||||||
else:
|
else:
|
||||||
release = 'post2008Server'
|
release = 'post2008Server'
|
||||||
else:
|
else:
|
||||||
|
|
Loading…
Reference in New Issue