繁体   English   中英

WiX更新奇怪的行为

[英]WiX Update strange behavior

因此,我将WiX 3.8与自定义的BootstrapperUI一起使用。 对于自定义UI,我使用WiX WPF。

目前,我甚至使用完整的安装程序来更新程序。

启动引导程序时,可以在卸载和更新之间进行选择(如果已安装该程序)。

当您选择更新时,将显示组件对话框,您可以在其中看到可选组件和重要组件,具体取决于先前的安装。

接下来,显示两个配置页面。

到现在为止,一切工作都非常可靠,但是当我开始安装(更新)时,我会发疯:

在大多数情况下,它都可以正常工作,并且一切都会按预期进行。 但是有时它什么也没做。

我使用的更新

<RemoveExistingProducts After="InstallInitialize" />

因此通常在安装新版本之前,所有内容都将被卸载。 但是,当更新失败时,似乎只是跳过了软件包。 我要解决的一个大问题是,我无法重现该错误。

我第一次寻找原因的尝试是检查先决条件,但是很好。 接下来,我检查了bootstrapperlog,但是它说这些组件只是未选择安装。

这是我用来确定用户选择的C#代码:

public override void OnPlanPackageBegin(WPFBootstrapperEventArgs<Wix.PlanPackageBeginEventArgs> args)
    {
        base.OnPlanPackageBegin(args);
        string msg = "";
        if (Inst && !forceabsent) {
            if (update) {
                bool displayed = false;
                foreach (WixPackage item in config.pkgInfo.Packages) {
                    if (item.Package == args.Arguments.PackageId) {
                        displayed = true;

                        if (item.isChecked) {
                            break;
                        }
                        else {
                            args.Arguments.State = Wix.RequestState.None;
                        }
                    }
                }

                if (!displayed) {
                    args.Arguments.State = Wix.RequestState.None;
                }
            }
            else {
                foreach (WixPackage item in config.pkgInfo.Packages) {
                    if (item.Package == args.Arguments.PackageId) {
                        if (item.isChecked) {

                        }
                        else {
                            args.Arguments.State = Wix.RequestState.None;
                        }
                    }
                    msg += item.DisplayName + " " + item.isChecked + "\n";
                }
            }
        }
        if (forceabsent) {
            foreach (WixPackage item in config.pkgInfo.Packages) {
                if (item.Package == args.Arguments.PackageId) {
                    args.Arguments.State = Wix.RequestState.ForceAbsent;
                }
            }
        }
    }

您有什么建议可以检查以确定我的更新为什么不起作用吗?

所以我自己找到了答案,只是因为我偶然发现一张解释表,条件Remove="ALL"也适用于修改和升级。

但这不能解释随机性。

我在此软件包中安装的产品也可以独立使用,我忘了检查一下。 因此,仅当有人尝试升级其版本并且他使用同一捆绑软件安装了所有组件时,才发生这种情况。

感谢所有想解决我的问题的人;)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM