我可以使用 Wix 自定义操作来确定是否安装 bootstrap 个软件包吗?

Can I use a Wix Custom Action to determine whether to install bootstrap packages?

我对使用 Wix 进行引导比较陌生 - 我的应用程序需要安装 PostgreSQL 和 PosgreSQL ODBC 连接器,而 Wix 似乎配备齐全,但我找不到的是如何确保我只 运行 如果应用程序尚未存在,则这些安装程序。

两者的注册表项似乎都非常依赖于版本,而且 Default 注册表项似乎没有设置,所以我最终需要检查注册表文件夹是否存在以验证该工具是否存在处于更新状态(这将与我的应用程序完全兼容)但似乎 Wix 只能搜索键值,不能搜索文件夹的存在。

This answer gives a pretty great explanation of how to do what I'm looking for using a Custom Action, other answers 建议自定义属性不能用于将值 传递给 安装程序,但我只想将它们用作开关。有办法吗?

我的(目前 working/tested 根本没有)Bundle 代码如下所示:

  <Bundle Name="My_Tool_Bootstrapper" Version="1.0.0.0" Manufacturer="" UpgradeCode="9d165ae8-303f-4887-b045-100470ed3b04">
    <BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense" />
    <Property Id="PostgresInstalled">0</Property>
    <Property Id="PGODBCInstalled">0</Property>
    <CustomAction Id="CheckPGInstalled" BinaryKey="VerifyPostgresInstallation.dll" DllEntry="VerifyPostgresInstalled" Execute="immediate" />
    <Chain>
      <PackageGroupRef Id="NetFx462Redist"/>
      <ExePackage Id="PostgreSQL-13.4" SourceFile="postgres-13.4-1-windows-x64.exe"/>
      <ExePackage Id="PGODBC-Connector" SourceFile="psqlodbc-setup.exe" />
    </Chain>
  </Bundle>

Wix 拒绝这种配置,而且我找不到任何关于我应该在哪里以及如何安排它才能工作的指南,这让我想知道这是否可能。如果我们假设 Custom Action 做它应该做的事,有没有办法以这种方式使用属性?我是否完全错误地期望 Wix 能够在没有非常具体的注册表项的情况下有条件地安装软件包?

捆绑包不支持自定义操作。您可以使用自定义引导程序应用程序,或者,如果您使用的是 WixStandardBootstrapperApplication,IBootstrapperBAFunction.