在/ quiet / silent上禁用Wix Custom操作

时间:2018-10-24 21:22:17

标签: c# custom-action wix3.5

在WIX自定义操作中,是否有一种方法可以检测是否通过/ silent或/ quiet命令行开关调用了MSI?基本上,我想要的是不执行自定义操作(因为它显示了表单),或者如果通过了这些命令行开关但我无法找到它,则以不同的方式处理它。

有没有办法检测到它?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

  1. 在MSI中定义了一个称为UI_LEVEL的属性(重要,将其全部大写)
  2. 在Bundle.wxs中,在我称之为MSIPackage的地方,我像这样设置UI_LEVEL属性

                                          

然后最后在自定义操作中检查该属性,例如

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