如何从 Inno Setup 外部访问 Inno Setup 安装程序的路径?

How to access the path of Inno Setup installed program from OUTSIDE of Inno Setup?

根据文档,Inno Setup 使用 AppName 或 AppId 允许您创建一个更新程序,该程序会自动将其文件放在用户安装初始应用程序的相同路径中。

我需要能够根据 AppId 确定 Inno Setup 安装文件的位置,而不是从 Inno Setup 中。例如,我需要能够从 Python 脚本中确定这一点。

一个用例:在已安装程序位置修补文件。将整个安装程序打包只是为了有条件地添加或编辑文本文件中的一行就太过分了。一个简单的 Python 脚本就可以完成此操作,而且用户可以根据需要查看脚本。我不能也不应该假设用户刚刚安装到默认位置,因此我需要能够看到用户安装程序的位置。

Inno Setup 显然将它存储在某个地方,因为它能够制作自己的补丁,但我似乎无法在注册表中找到它。我已经在注册表中搜索了我的应用程序 ID,但我只在“卸载”部分看到了它。我可能可以从那里提取它,但我认为您也可以创建没有卸载程序的安装程序 - 在这种情况下最终会在哪里?

注册表的路径存储到 HKLM(管理安装模式)或 HKCU(非管理安装模式)到以 AppId 和 [=14= 命名的子项] 后缀,存储在键 SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall 下。值名称是 Inno Setup: App Path。该路径还存储到 InstallLocation 并带有附加的尾部斜杠,因为这是 Windows 从中读取它的地方。但是 Inno Setup 读取第一个值。

HKLM的示例:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\appid_is1]
"Inno Setup: App Path"="C:\Program Files\My Program"
"InstallLocation"="C:\Program Files\My Program\"

你可以在几十个问题中看到这一点,这些问题展示了如何读取 Inno Setup 代码中的值。例如: