在 Python 中获取当前 Windows 11 版本
Get current Windows 11 release in Python
在 Python 3.8.10 中,我无法获得正确的 Windows 版本,我是 运行 Windows 11 Insider Preview,但输出显示 Windows10
任何解决方法?
编辑:目前我发现检测 W11 的唯一方法是
wmic os get name
platform.release()
call traces to win32_ver()
which then calls the C function sys_getwindowsversion_impl()
.
那个 C 调用只是拉取版本 of kernel32.dll
file i.e. not of the Windows itself by utilizing the GetFileVersionInfoW()
+ VerQueryValueW()
Win32 API 函数。
因此,在 kernel32.dll
文件的版本更改之前,它将保持不变 Windows 10. 手动检查结果是否与该系统匹配,如果不匹配,请为 CPython 打开一个错误。
关于这是否是正确的实现,我认为值得商榷。显然 it was in the past but now it's not, so I guess just use ctypes
for GetProductInfo()
或从注册表中提取它。
但是,您使用的是预览版,这是版本可能“不正确”的原因之一,因为也许 Windows 开发人员 intend 它仍然是 10 而不是 11,并且在系统的某个地方有一个标志说它是“10”+“预览”。
我最终遵循的解决方案:
def IsWin11():
if sys.getwindowsversion().build > 20000:return True
else:return False
在 Python 3.8.10 中,我无法获得正确的 Windows 版本,我是 运行 Windows 11 Insider Preview,但输出显示 Windows10
任何解决方法?
编辑:目前我发现检测 W11 的唯一方法是
wmic os get name
platform.release()
call traces to win32_ver()
which then calls the C function sys_getwindowsversion_impl()
.
那个 C 调用只是拉取版本 of kernel32.dll
file i.e. not of the Windows itself by utilizing the GetFileVersionInfoW()
+ VerQueryValueW()
Win32 API 函数。
因此,在 kernel32.dll
文件的版本更改之前,它将保持不变 Windows 10. 手动检查结果是否与该系统匹配,如果不匹配,请为 CPython 打开一个错误。
关于这是否是正确的实现,我认为值得商榷。显然 it was in the past but now it's not, so I guess just use ctypes
for GetProductInfo()
或从注册表中提取它。
但是,您使用的是预览版,这是版本可能“不正确”的原因之一,因为也许 Windows 开发人员 intend 它仍然是 10 而不是 11,并且在系统的某个地方有一个标志说它是“10”+“预览”。
我最终遵循的解决方案:
def IsWin11():
if sys.getwindowsversion().build > 20000:return True
else:return False