在 /quiet /silent 上禁用 Wix 自定义操作

Disable Wix Custom action on /quiet /silent

在 WIX 自定义操作中,有没有办法检测是否使用 /silent 或 /quiet 命令行开关调用了 MSI?基本上我想要的是不执行自定义操作(因为它显示了一个表单)或者如果传递了这些命令行开关但我无法找到它。

有没有办法检测到它?

您可以检查 属性 UILevel 并根据您的条件执行您的 CA。

我终于明白了。 Wix 基本上总是将 UILevel 属性 设置为 2.0。它有自己的 属性,称为 WixBundleUILevel。现在重要的是,在 Wix 3.11 之前,这个 WixBundleUILevel 是一个内部 属性,Bundle 项目或 MSI 自定义操作无法访问。这就是我所做的

  1. 在 MSI 中定义了一个名为 UI_LEVEL 的 属性(重要,全部大写)
  2. 在 Bundle.wxs 中,就在我调用 MSIPackage 的地方,我将 UI_LEVEL 属性 设置为

然后最后在自定义操作中我检查了这个属性 like

int uiLevel;
                if (int.TryParse(session["UI_LEVEL"], out uiLevel))
                {
                    if (uiLevel == 4)
                        using (var form = new WhatsNew())
                        {
                            form.ShowDialog();
                        }
                    else
                        session.Log("Skipping What's new dialogue as UI Level is not 4");

                }
                else
                {
                    session.Log("Couldnt figure out the UI level, so skipped the prompt");
                }

最后

here are the possible values of this f**ed up property
                WixBundleUILevel              Value     Burn parameters
                BOOTSTRAPPER_DISPLAY_FULL       4         (none)
                BOOTSTRAPPER_DISPLAY_PASSIVE    3         /silent
                BOOTSTRAPPER_DISPLAY_NONE       2         /quiet