【问题标题】:Disable Wix Custom action on /quiet /silent在 /quiet /silent 上禁用 Wix 自定义操作
【发布时间】:2018-10-24 21:22:16
【问题描述】:

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

有没有办法检测到它?

【问题讨论】:

    标签: c# custom-action wix3.5


    【解决方案1】:

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

    【讨论】:

    • 谢谢我试过这个,但对我来说 UILevel 总是 2,不管她的 /quiet 参数是否通过。我还注意到日志文件中的一些其他属性,例如 ClientUILevel 和 WixBundleUILevel,但我的 session 参数一直为它们为 null。请问有什么我可能会出错的想法吗?
    • @Nikhil,有趣的是它没有改变;您是否正在延迟运行您的 CA?如果是这样,您将无法访问数据库,即属性,而无需手动将它们注入会话。
    • 您好,我没有延迟运行它。我在 Wix GitHub 上遇到了一个已注册的问题,该问题声称引导程序会覆盖 UILevel 属性并始终将其设置为 2。不过,没有关于发生的情况的更新。这是链接github.com/wixtoolset/issues/issues/3789
    • 很高兴听到您解决了它。我一直在使用 WiX v3.11.1,并且能够使用标准引导程序应用程序正常访问 UILevel 属性。
    • 谢谢伯特。你介意分享一些关于你是如何做的代码示例吗?对我来说,用例是在自定义操作(非延迟)中访问它,这是 MSI 安装序列的一部分。这个 MSI 然后是引导程序的一部分。
    【解决方案2】:

    我终于明白了。 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
    

    【讨论】:

      猜你喜欢
      • 2021-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多