Inno setup 使用Innosetup强制执行单一安装?

Inno setup 使用Innosetup强制执行单一安装?,inno-setup,Inno Setup,我们有一份申请,我们授权给不同的公司。该应用程序是定制的,以适应他们的品牌;基本上,它是同一个应用程序,但具有不同的主题文件。我们为每个供应商生成单独的安装程序,因为每个应用程序需要不同的配置(要连接的服务器、更新等) 因此,每个安装程序都包含相同的已编译应用程序,但配置不同。所有这些都由我们的构建系统管理,因此添加一个新的供应商只需为Inno设置创建一个新主题和一个简单的include脚本 我们的问题是,我们希望确保当用户从供应商a安装应用程序时,他们将无法从供应商B安装应用程序,除非他们明确

我们有一份申请,我们授权给不同的公司。该应用程序是定制的,以适应他们的品牌;基本上,它是同一个应用程序,但具有不同的主题文件。我们为每个供应商生成单独的安装程序,因为每个应用程序需要不同的配置(要连接的服务器、更新等)

因此,每个安装程序都包含相同的已编译应用程序,但配置不同。所有这些都由我们的构建系统管理,因此添加一个新的供应商只需为Inno设置创建一个新主题和一个简单的include脚本

我们的问题是,我们希望确保当用户从供应商a安装应用程序时,他们将无法从供应商B安装应用程序,除非他们明确卸载现有应用程序


Inno Setup中是否有一些设置可以检查是否存在现有安装(来自同一供应商或不同供应商),并告诉用户必须删除现有安装?

您可以手动选择要安装的品牌,但不能 设置品牌然后归档


仅要求用户选择品牌。。。。永远不要让他们选择文件。。并添加具有不同品牌的不同二进制文件。

安装程序将始终检查是否有具有相同的
AppID
的以前的安装,如果找到,则不会在软件小程序中创建新条目、用于卸载的新数据等,而是使用新文件和设置更新以前的安装,将新数据合并到现有数据中,并将单个条目保留在软件小程序中

因此,只要您的所有不同品牌都有相同的
AppId
,就不可能在同一系统上安装两种配置/品牌。现在,您不应该取消正在运行的安装,而应该简单地让您的安装程序足够聪明,能够自己处理这个问题

使用Inno安装脚本检查是否以前安装过其他品牌,或者当前品牌是否正在更新。您可以使用
SetPreviousData()
GetPreviousData()
支持函数将一些品牌特有的数据保存到注册表中,并在其中一个设置初始化事件函数(请参阅文档)中对其进行测试。如果先前保存的数据与即将安装的品牌相匹配,您只需继续更新安装即可。如果不同,您可以询问用户是取消还是更换已安装的品牌