gpt4 book ai didi

inno-setup - InnoSetup : uninstall/update if install in the previous directory

转载 作者:行者123 更新时间:2023-12-01 23:55:22 26 4
gpt4 key购买 nike

我们软件的不同版本应该可以通过指定不同的安装目录来并行安装。但是,如果用户决定在先前版本的安装目录中安装,则应更新该目录(也就是在此目录中卸载先前版本并安装新版本)。

使用与 InnoSetup FAQ 中描述的相同的 AppId没有选择,否则无法并行安装。

最佳答案

实际上 AppId 是正确的做法。 AppId 可以指定为 {code:...} 常量。如 help for that value 中所述,这将被多次调用;至少在向导启动前一次,在安装正确开始前至少一次。

第一次调用它时,您应该返回一个已知值(固定默认值 [可能是空字符串] 或从注册表中检索到的一些最近使用的值)以帮助查找以前的值,尤其是如果用户确实决定只安装一个实例。请注意,为了获得最佳用户体验,您应该尝试在任何后续安装(例如,第一次此类安装或最近的安装)中为先前安装的实例返回“真实”有效值,但这不是必需的。

在显示 wpSelectDir 并且用户选择了他们的目标路径后,您应该从对该函数的后续调用中返回“真实的”AppId。使用什么值由您决定,但您必须满足以下要求:

  • 它对于您的应用程序必须是唯一的(任何其他应用程序都不应使用相同的值)。
  • 对于您的应用程序的特定实例,它必须是唯一的(不同文件夹中的并排安装必须具有不同的值)。
  • 它必须针对您的应用程序的特定实例进行修复(如果您的应用程序安装到特定文件夹中,尝试重新安装到同一文件夹中而不进行中间卸载必须产生与上一次完全相同的值;如果它被卸载首先然后它可以产生相同的值 [只要它仍然是唯一的] 但这不是必需的)。

这样做的一种方法是使用特定于应用程序的固定前缀,后跟目标目录的编码形式(至少去除反斜杠)。另一种方法是在现有安装的注册表中维护一个列表,并使用数字后缀指示特定实例在该列表中的位置(请记住,如果它们被乱序卸载,这可能最终会不连续)。

(如果您确实维护了以前安装的实例列表,那么这会提供其他选项来改善用户体验,例如通过自定义向导页面明确询问他们是要升级现有实例还是安装新实例,在前一种情况下,您可以让他们从实例列表中选择而不是显示 wpSelectDir。当然,这种方式需要相当多的代码。)

进一步注意,如果存在以前的版本,则不应卸载;只需安装在顶部。通常你不需要为此做任何特别的事情,但在极少数情况下你可能想要添加 [InstallDelete] 条目来删除现在冗余的文件。只要您为 AppId 维护上述规则,它就可以正常运行。

关于inno-setup - InnoSetup : uninstall/update if install in the previous directory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24016296/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com