【发布时间】:2018-10-24 21:22:16
【问题描述】:
在 WIX 自定义操作中,是否可以检测是否使用 /silent 或 /quiet 命令行开关调用了 MSI?基本上我想要的是不执行自定义操作(因为它显示一个表单)或者如果通过了这些命令行开关但我无法找到它。
有没有办法检测到它?
【问题讨论】:
标签: c# custom-action wix3.5
在 WIX 自定义操作中,是否可以检测是否使用 /silent 或 /quiet 命令行开关调用了 MSI?基本上我想要的是不执行自定义操作(因为它显示一个表单)或者如果通过了这些命令行开关但我无法找到它。
有没有办法检测到它?
【问题讨论】:
标签: c# custom-action wix3.5
您可以查看UILevel属性并根据您的条件执行您的CA。
【讨论】:
UILevel 属性。
我终于明白了。 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
【讨论】: