使用winapps模块查询外部应用安装路径返回None的原因是什么
可能的原因如下:
- 注册表未写入
InstallLocation字段winapps的核心逻辑是读取Windows系统两个注册表路径下的信息:HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall、HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Uninstall。不少软件的安装包在打包时没有主动往注册表写入InstallLocation的值,这时候读取该字段自然返回None,是非常常见的情况。 - 32/64位注册表映射不匹配
如果你的操作系统是64位,运行的Python是32位版本,默认会读取Wow6432Node下的32位注册表项,要是目标软件是64位程序,注册表信息存放在64位路径下,就会出现字段读取不全的问题,反之亦然。 - 应用名称匹配有误
你使用的是全等匹配逻辑app.name == "e-Invoicing System",如果注册表中实际记录的应用名前后带空格、大小写有差异、或者附带版本号后缀,就可能匹配到错误的应用,可以先遍历打印所有应用的name字段核对实际写法。 - 权限不足
如果Python进程没有管理员权限,部分写入到HKEY_LOCAL_MACHINE全局路径的注册表项会被限制读取,也可能返回空值。
排查建议
可以先运行如下代码做模糊匹配排查,同时查看应用的其他关联字段(比如UninstallString、DisplayIcon),这两个字段绝大多数软件都会写入,通常包含安装路径,可以从中提取:
import winapps for app in winapps.list_installed(): if "e-Invoicing" in str(app.name): print(f"应用实际名称:{repr(app.name)}") print(f"安装位置:{app.install_location}") print(f"卸载字符串:{app.uninstall_string}") print(f"图标路径:{app.display_icon}")
内容的提问来源于stack exchange,提问作者Tronzen
相关产品推荐
相关产品推荐

