在 /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 自定义操作无法访问。这就是我所做的
- 在 MSI 中定义了一个名为 UI_LEVEL 的 属性(重要,全部大写)
在 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
在 WIX 自定义操作中,有没有办法检测是否使用 /silent 或 /quiet 命令行开关调用了 MSI?基本上我想要的是不执行自定义操作(因为它显示了一个表单)或者如果传递了这些命令行开关但我无法找到它。
有没有办法检测到它?
您可以检查 属性 UILevel 并根据您的条件执行您的 CA。
我终于明白了。 Wix 基本上总是将 UILevel 属性 设置为 2.0。它有自己的 属性,称为 WixBundleUILevel。现在重要的是,在 Wix 3.11 之前,这个 WixBundleUILevel 是一个内部 属性,Bundle 项目或 MSI 自定义操作无法访问。这就是我所做的
- 在 MSI 中定义了一个名为 UI_LEVEL 的 属性(重要,全部大写)
在 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