本文介绍如何在python中可靠获取.exe文件的版本号,解决使用win32com的scripting.filesystemobject调用getfileversion时频繁报错(pywintypes.com_error)的问题,并提供基于win32api的稳定替代方案。
Scripting.FileSystemObject.

推荐改用 win32api.GetFileVersionInfo —— 它直接调用Windows原生API GetFileVersionInfo(),绕过COM层,稳定性高、兼容性强,且能正确解析嵌入在PE文件资源段中的版本信息(VS_VERSIONINFO)。
以下是完整、健壮的实现示例:
from win32api import GetFileVersionInfo, LOWORD, HIWORD
def get_version_number(filename):
"""
获取Windows可执行文件(.exe/.dll等)的文件版本号,格式为 a.b.c.d
返回元组 (major, minor, build, revision),失败时返回 (0, 0, 0, 0)
"""
try:
# 获取版本信息块(根块"\\"表示主版本资源)
info = GetFileVersionInfo(filename, "\\")
# 解析FileVersion字段(MS: Most Significant, LS: Least Significant)
ms = info['FileVersionMS']
ls = info['FileVersionLS']
return (
HIWORD(ms), # 主版本号(高位字)
LOWORD(ms), # 次版本号(低位字)
HIWORD(ls), # 构建号(高位字)
LOWORD(ls) # 修订号(低位字)
)
except Exception as e:
print(f"获取版本信息失败: {e}")
return 0, 0, 0, 0
# 使用示例
file_path = r'C:\Users\Alex\Downloads\ChromeSetup.exe'
version_tuple = get_version_number(file_path)
version_str = ".".join(map(str, version_tuple)) # 更简洁的拼接方式
print(f"文件版本: {version_str}") # 输出如:125.0.6422.142✅ 关键说明与注意事项:
该方法已在Windows 10/11 + Python 3.8–3.12 + pywin32 306+ 环境中验证通过,是生产环境中获取Windows二进制文件版本号的首选方案。