Installshield:套件和 MSI 功能

Installshield: suite and MSI feature

我有点苦恼于与 msi 功能套件相关的功能。 我有一个包含多个 MSI 文件的套件项目。在一个 MSI 中,我有一些我想选择安装的功能。

我在套件项目中添加了这个,以便将它与套件功能列表中的复选框相关联。

":MSIPackageFeatureName" next to

"Selection Name="NewFeature" DisplayName="ID_STRING" Install="{00000000-0000-0000-0000-000000000000}"

但无论如何都会安装该功能,即使未选中该复选框也是如此。

所以我的第一个问题是,我应该添加一些自定义操作来更改安装级别吗?或者,如果未选中该复选框,我该如何防止安装该功能。

+奖金。出于某种原因,如果我检查它。其他一些文件没有安装,这些文件与该功能无关。

InstallShield Suite 可以在其中一个 MSI 中处理 selection 功能,但这并不容易。通常,通过沿着这些功能线将 MSI 分成两个(或更多)并将这些单独的 MSI 包含在套件中,您可能会发现重构 MSI 更容易。

如果您无法重构 MSI 的组成(可能是第三方 MSI,或者重构比替代方案更糟糕),您可以遵循 Configuring Package Features from a Suite/Advanced UI or Advanced UI Installer 上的指南。特别注意以下细微之处:

  • <Selection ... Install="{guid}"/>
  • 格式包含引用整个包的 Selection 元素很重要
  • 此外,您需要多个(最好是子)选择元素,它们引用 <Selection ... Install="{guid}:FeatureName"/> 格式的特征名称;请注意,一旦您列出一个 {guid}:FeatureName,所有功能都必须在某处列出(和 selected),否则它们将不会被安装。

在您的示例中,您有一个空 guid 而不是套件分配给包的 guid,并且您没有显示指定功能名称的子元素。因此,有可能通过列出一个功能而不列出另一个功能,无论您做什么,其他功能都被排除在安装之外 select。

也不清楚您是指使用 InstallationFeatures 页面显示复选框,还是创建自己的复选框来切换单个功能(后者需要引用伪属性 FEATURE[<em>feature-name</em>].actionState 其中 feature-name 是您的 Selection 元素中的名称)。