根据文档,Inno Setup使用AppName
或AppId
来允许您创建一个更新程序,该程序将自动将其文件放在用户安装初始应用程序的相同路径中。
我需要能够确定Inno Setup安装文件的位置,以AppId
为基础,但不是从Inno Setup内。例如,我需要能够从Python脚本中确定这一点。
一个用例:在已安装的程序位置修补文件。如果仅仅为了在文本文件中有条件地添加或编辑一行而打包整个安装程序,那就太过分了。一个简单的Python脚本就可以完成这个任务,如果用户愿意,还可以查看脚本。我不能也不应该假设用户只是安装到默认位置,因此我需要能够看到用户安装程序的位置。
Inno Setup显然将此存储在某个地方,因为它能够制作自己的补丁,但我似乎无法在注册表中找到它。我已经在注册表中搜索了我的应用程序ID,但我只在Uninstall
部分看到它。我可以从那里把它拉出来,但我认为你也可以创建安装程序,而不创建卸载程序——在这种情况下,这将结束在哪里?
路径存储到注册表HKLM
(管理安装模式)或HKCU
(非管理安装模式),存储到以AppId
命名的子密钥,并带有_is1
后缀,存储在密钥SOFTWAREMicrosoftWindowsCurrentVersionUninstall
下(如您所知)。取值为"Inno Setup: App Path
"。该路径也存储到InstallLocation
中,并带有附加的斜杠,因为Windows就是从那里读取它的。但是Inno Setup读取第一个值。
HKLM
示例:
[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionUninstallappid_is1]
"Inno Setup: App Path"="C:\Program Files\My Program"
"InstallLocation"="C:\Program Files\My Program\"
您可以在几十个问题中看到这一点,这些问题显示了如何读取Inno Setup代码中的值。例如:
如何从注册表中获取目标游戏/应用程序的安装路径,当使用Inno Setup安装mod/插件时?
如果您创建了一个无法卸载的安装程序(CreateUninstallRegKey=no
或CreateUninstallRegKey=no
),则该路径不会存储在任何地方。在这种情况下,您必须显式地编写安装程序代码,以便在某处为您存储路径。