在WIX自定义操作中,是否有一种方法可以检测是否通过/ silent或/ quiet命令行开关调用了MSI?基本上,我想要的是不执行自定义操作(因为它显示了表单),或者如果通过了这些命令行开关但我无法找到它,则以不同的方式处理它。
有没有办法检测到它?
答案 0 :(得分:1)
您可以检查属性UILevel并根据您的条件执行CA。
答案 1 :(得分:0)
我终于明白了。 Wix基本上总是将UILevel属性设置为2.0。它具有自己的称为WixBundleUILevel的属性。现在重要的是,在Wix 3.11之前,此WixBundleUILevel是内部属性,捆绑项目或MSI自定义操作无法访问。这就是我所做的
在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