【问题标题】:Inno Setup - install files based on feature and automatic updateInno Setup - 基于功能和自动更新安装文件
【发布时间】:2017-10-24 12:46:58
【问题描述】:

我们有以下需要在 Inno Setup 中完成的要求。我们需要支持基于密码的文件安装以及通过互联网更新或 DVD 自动更新下一个版本

要求是:

  1. 一个应用程序有多个通用文件
  2. 除此之外,我们需要根据每个功能的密码安装 FeatureA 或 FeatureB 或 FeatureC。像这样,我们有 20 种不同的功能。
  3. 用户一次只能安装一项功能。但他们可以根据密码添加其他功能。

上述方案适用于从 DVD 映像运行安装程序。在 int 更新的情况下,客户安装的所有功能都应自动更新,无需用户提示密码。它应该默默地完成。


例子:

之前未安装我们软件的 PC。客户使用 SWVER001 DVD。使用 Feature1PWD 安装 => 将安装 Basic SW + common files + Feature1 files

再次使用 SWVER001 DVD 安装。这次用户给出 Feature2PWD ==> Feature2 文件将被安装。基本 SW + Commonfiles + Feature1 文件将被保留和保持不变。 Main Sw 将同时看到 Feature 1 和 Feature 2

用户使用互联网更新安装 SWVER002。此处安装程序应同时看到 Basic SW + Common 文件 + Feature1 文件 + Feature2 文件。它应该在没有用户输入的情况下一次更新所有 4 个。静默更新就好了


我正在考虑以下方法 1. 使用基本/通用安装文件创建一个主安装程序 2.然后为每个功能创建子安装程序 3. 然后主安装程序将根据密码调用子安装程序。 4. 主设置然后将之前选择的功能存储在注册表/ini文件中

在 int 更新的情况下,从 registry/ini 中获取之前选择的功能,然后自动进行静默安装,无需任何用户输入

还有其他更好的建议可用于在 Inno Setup 中配置上述内容吗?

【问题讨论】:

    标签: inno-setup


    【解决方案1】:

    为每个特征创建一个组件并根据输入的密码自动选择组件更容易。

    类似:

    [Components]
    Name: "FeatureA"; Description: "Feature A"
    Name: "FeatureB"; Description: "Feature B"
    Name: "FeatureC"; Description: "Feature C"
    
    [Code]
    
    function TestComponentPassword(
      Password: string; Component: string; ComponentPassword: string): Boolean;
    var
      I: Integer;
    begin
      Result := (Password = ComponentPassword);
    
      if Result then
      begin
        for I := 0 to WizardForm.ComponentsList.Items.Count - 1 do
        begin
          WizardForm.ComponentsList.Checked[I] :=
            (WizardForm.ComponentsList.Items[I] = Component);
        end;
      end;
    end;
    
    function CheckPassword(Password: String): Boolean;
    begin
      Result :=
        TestComponentPassword(Password, 'Feature A', 'aaa') or
        TestComponentPassword(Password, 'Feature B', 'bbb') or
        TestComponentPassword(Password, 'Feature C', 'ccc');
    end;
    

    在 Inno Setup 6 中,您可以使用 WizardSelectComponents 而不是按名称查找组件。


    对于更新,请为每个组件/功能创建单独的安装程序。对所有安装程序使用相同的AppId,以便它们共享卸载日志。

    【讨论】:

    • 谢谢@Martin。您的解决方案将非常适合新安装。但它不会用于升级/互联网更新,因为我们不要求输入密码。逻辑应该是在 DVD 更新或互联网更新的情况下,安装程序应该根据已安装的功能自动拾取组件
    • 我认为我们可以扩展 CheckPassword 一点点来检查 ini 文件或注册表中安装的功能,以防升级或互联网更新
    • Inno Setup 会自动为您选择过去的组件。因此,您所要做的就是允许用户选择是否需要添加新功能(并显示密码提示)或是否要更新(跳过密码提示并让 Inno Setup 重新加载过去的组件)。
    • 感谢@martin 的回复以及在静默安装情况下自动选择已安装组件的提示。它非常有用。但是,我们在这方面有一些小问题。在互联网更新的情况下,我们将根据客户安装的功能发布更新
    • 为此请发布一个新问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多