如何在Inno Setup外部查询其安装的程序对应的路径?
Inno Setup 安装路径查询方案
1. 常规带卸载信息的安装包查询
绝大多数默认配置打包的Inno Setup程序,安装路径会写入系统注册表的卸载节点,你可以优先从这里读取:
- 注册表路径分两类,对应不同安装权限:
- 所有用户安装(管理员权限):
- 64位程序:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{AppId}_is1 - 32位程序在64位系统:
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{AppId}_is1
- 64位程序:
- 单用户安装(普通权限):
- 64位程序:
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{AppId}_is1 - 32位程序在64位系统:
HKEY_CURRENT_USER\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{AppId}_is1
- 64位程序:
- 所有用户安装(管理员权限):
上述路径下的InstallLocation键值即为实际安装路径,Python读取示例(使用标准库winreg):
import winreg def get_innosetup_install_path(app_id: str, is_all_user: bool = False, is_32bit: bool = False) -> str | None: root = winreg.HKEY_LOCAL_MACHINE if is_all_user else winreg.HKEY_CURRENT_USER sub_path = "SOFTWARE" if is_32bit: sub_path += r"\WOW6432Node" sub_path += fr"\Microsoft\Windows\CurrentVersion\Uninstall\{app_id}_is1" try: key = winreg.OpenKey(root, sub_path) install_path, _ = winreg.QueryValueEx(key, "InstallLocation") winreg.CloseKey(key) return install_path.strip() except FileNotFoundError: return None
2. 不带卸载程序的安装包查询
如果安装包打包时设置了Uninstallable=no或者CreateUninstallRegKey=no,Inno Setup不会生成卸载注册表项,此时需要分两种情况处理:
- 若开发者需要支持后续升级,一般会主动在安装脚本中将
{app}(安装路径变量)写入自定义注册表路径,你可以根据AppId关联的程序信息,查询对应开发者预设的自定义注册表项读取路径。 - 若开发者未做额外路径存储配置,可通过特征文件匹配的方式定位:优先遍历
%ProgramFiles%、%ProgramFiles(x86)%、%AppData%、%LocalAppData%等常见安装目录,匹配你已知的程序唯一主执行文件名或者特征文件,取文件所在目录即为安装路径。
内容的提问来源于stack exchange,提问作者mngeek206
相关产品推荐
相关产品推荐

