3

我在工作中被推到了 DevOps 的位置,对 InstallShield 或我正在做的事情知之甚少。我学到的一切都是通过阅读和阅读 Flexera 的文档而学到的。我们的一张票是我在谷歌搜索时无法找到结果的问题——我可能使用了错误的搜索词,但不知道什么是正确的。

基本上,我们的安装程序有很多功能。其中一些功能具有子功能,如果您选择主要功能,则始终安装这些功能。一切都设置为默认安装,但您可以禁用任何功能。如果您希望它们是完全独立的,它们应该是完全独立的。功能 1 的子功能在安装程序中可见(尽管您不能取消选择它们,或从功能 1 中单独选择它们),但功能 4 不可见。

|- FEATURE 1
|---- FEATURE A
|---- FEATURE B
|---- FEATURE C
|- FEATURE 2
|- FEATURE 3
|- FEATURE 4
|---- FEATURE D
|---- FEATURE E
|---- FEATURE F
| ...

特征 F 下只有一个组件。该组件安装了一大堆 DLL 和配置文件 - 这不是最佳实践,但也不是我可以在此问题范围内更改的内容。查看组件的功能列表时,它被设置为仅功能 F。它 - 并且它包含文件夹 - 在查看任何其他功能的文件时不会显示。

当您选择功能 1 作为唯一选项时,正在安装功能 F。其他功能也可能会发生这种情况,但功能 1 安装速度最快,因此经过最多测试。

这是一个基本的 MSI 项目。我试图通过将“创建 MSI 日志”选项设置为“是”来让 InstallShield 创建日志,但是当我通过运行 Setup.exe 进行测试安装时,它没有生成日志文件。我浏览了 UI 中的脚本并执行安装序列,看起来并没有选择功能 F。

我是否错过了可以将功能相互链接的地方 - 如果是这样,在哪里?

4

2 回答 2

4

尝试的具体答案:

自定义操作:根据可用信息(0 个条件),我假设使用一个或多个自定义操作来实现您在上面描述的功能逻辑。您应该能够在Installscript view我认为的项目中找到自定义操作代码?(在 中带有关联的自定义操作条目Custom actions view)。

也有可能没有使用 Installscript,但逻辑是用其他语言(VBScriptC++JavaScriptPowerShell等...)实现的——在这种情况下,您应该直接去Custom actions view寻找嫌疑犯。源代码可以嵌入到自定义操作(脚本)中,也可以存储在其他地方(C++ 总是如此)。

记录:为了启用记录,请尝试打开您的项目,然后转到Build => Settings... => MSI Log File,现在单击All Error Messages并框中Verbose Output键入文件名Log File单击OK。现在尝试构建并运行您的项目。以下是如何使用 msiexec.exe(在 Installshield 之外)启用日志记录。具体例子;最简单形式的日志记录命令:

msiexec.exe /i C:\Path\Your.msi /L*v C:\Your.log

更新我在 Installshield 的 KDB (Q208877) ( KDB ). 它使用了一些非常奇怪的特征选择技术 - 请参阅实际文章了解详细信息。有一个可下载的 ISM 文件。

我无法从 Wayback 中恢复上述链接。但是,也许这是同一篇文章:Change Installation State of a Feature, Based on Another Feature's Selection State

在我看来,一个更好的方法是here. 您的设置可能正在使用其中一些技术。在档案中也找不到该链接。


尝试的一般答案:

有一整套可以影响特征选择的机制,如下所示。以下主要针对基本 MSI 项目,对于Installscript MSI 项目,还有更多可用的机制 - 主要是 Installscript 功能。在列表之前,一些重要的花絮:

  • 功能名称区分大小写!
  • 下面的不同机制肯定会相互干扰。

现在是名单。据我所知,特征选择可能会受到(至少)以下机制的影响:

  1. 标准msiexec.exe命令行
  2. 用户交互设置 GUI
    • MSI GUI 功能选择对话框(如果在设置中可用)。
    • 一些设置(不是全部)有一个“自定义”对话框,允许用户选择要安装和不安装的功能。
    • 可见特征可以直接受到影响(以及它们的子特征——可见与否——取决于特征配置——搜索msidbFeatureAttributesFollowParent)。
    • 在某些设置中可以设置几种可能的功能状态。宣传功能、安装功能、不安装功能等...
    • 可能有从设置 GUI 运行的自定义操作会影响功能选择状态(请参阅下面的自定义操作部分)。
      • 例如,基于选择一个特征的用户交互,可以选择或取消选择其他特征。
      • 对于 Installscript MSI 设置,其逻辑是内置的(也可自定义)。对于基本 MSI 设置,可以执行类似的操作,但可用的自动魔法较少。
  3. 安装级别
    • 应该提到这个强制设置属性。它是确定是否要安装特定功能的基线。每个设置都有一个INSTALLLEVEL.
    • 每个功能都有自己的级别属性,如果其级别属性设置为等于或小于设置的整体的数字,则将安装该功能INSTALLLEVEL
    • 因此,可以通过调整设置来影响多个功能的请求安装状态 INSTALLLEVEL
    • 一个不好但并不少见的做法是最大 INSTALLLEVEL到 32767 以强制安装所有功能。这是错误的,因为某些功能可能与系统不兼容(错误系统的错误文件)。
  4. 特征条件
    • 如前所述,所有功能都有一个级别属性,可以通过在运行时评估的条件语句进行操作。
    • 这与前一点有关,但恰恰相反:现在我们正在更改每个特征的级别属性,而不是设置自己的基线特征级别 ( INSTALLLEVEL)。
    • 请参阅 中的级别Feature Table
    • 实际的条件逻辑在Condition tableusing 中Conditional Statement Syntax。所以条件被评估,如果他们评估为真,这会影响功能的安装级别。
    • AppSearch可以涉及设置构成特征条件的属性。
    • 对于每个功能,如果该功能的安装级别低于或等于设置的INSTALLLEVEL property,则将该功能设置为安装。
  5. 自定义操作
  6. 迁移特征状态

一些链接

于 2018-05-27T21:11:43.247 回答
1

短版

  • Feature F可能被设置为Feature 1(可能还有其他人)的必需功能。
  • 请检查 的Required FeaturesFeature 1
  • 为此,只需转到功能视图并选择Feature 1- 然后查看Required Features值。如果Feature F在那里列出,那么这将导致您看到的行为。

Error, Error - The Matrix's Got You :-):我写了一个很长的答案,关于特征选择如何受到许多事情的影响Basic MSI projects,但是再次阅读你的问题,我几乎确信这是一个Installscript MSI project而不是一个Basic MSI project,以及原因是您描述的功能对话框行为。

Installscript MSI: Installshield 应用程序窗口的左上方将显示项目类型。它会说:"My Project Name-1 - Installshield [InstallScript MSI Project]. 你能核实一下它说的是什么吗?(最后一部分 - 在括号内 - 是关键)。两种项目类型对功能的处理方式完全不同。Installscript MSI projects具有自定义 Installshield 对话框(Win32 对话框),而不是标准的 Windows Installer 对话框Basic MSI projects(在表格中定义)。我非常不喜欢 Installscript MSI 项目——我发现它们有问题,但它们确实有一些不错的功能。我不会使用它们。主观意见。基本 MSI 项目是标准 MSI 文件,更适合企业部署。

“必需功能”:当您在 Installshield 中查看 的功能视图时Installscript MSI project,您有比Basic MSI project. 该Required Features设置特别包含了许多功能,以允许功能相互依赖 - 这必须由您自己在基本 MSI 项目中以完全不同的方式实现。该字段是您所看到的特征选择行为的关键——我很确定这一点。有关建议的前进方法,请参见下文。

记录:为了启用记录,请尝试打开您的项目,然后转到Build => Settings... => MSI Log File,现在单击All Error Messages并框中Verbose Output键入文件名Log File单击OK。现在尝试构建并运行您的项目。

概括:

  1. 我会验证项目类型到底是什么。Installscript MSI - 可能。
  2. 在验证它是一个 Installscript MSI 项目后,我会依次打开Feature view并检查每个功能的值。Required Features
  3. 我的猜测是,所有逻辑都是 Installshield 的“自动”逻辑——您只需通过调整“所需功能”值来为每个功能定义它需要的其他功能。
  4. 似乎只要您不需要任何其他逻辑,Installshield 就会“自动”处理功能选择,并且您会获得一个功能齐全的功能选择对话框 - 只要您正确定义了功能依赖关系。
  5. 我还没有对 Installscript MSI 对话框进行任何自定义,所以我不能直接帮助你,但我很确定调整“必需功能”值应该是一个很好的起点,以确定你需要什么。
  6. 您能否也检查一下Installscript view是否有与 GUI 相关的自定义代码?您可能还想检查Custom Actions & Sequences视图 - 检查以其他方式(VBScripts、PowerShell、JavaScript 等)实现的任何自定义逻辑。
于 2018-05-25T01:52:15.400 回答