所以我使用WiX 3.8和自定义BootstrapperUI。 对于自定义UI,我使用WiX WPF。
目前,即使更新程序,我也会使用完整设置。
启动引导程序时,您可以选择卸载和更新(如果已安装程序)。
当您选择更新时,会显示一个componentdialog,您可以在其中看到可选和重要的组件,具体取决于之前的安装。
接下来,显示两个配置页面。
在此之前一切都非常可靠,但是当我开始安装(更新)时,它让我发疯:
我在大多数情况下它工作正常,一切都按照应有的方式进行。 但有时它什么也没做。
对于更新我使用
<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;
}
}
}
}
您有什么建议我可以检查以确定更新无效的原因吗?
答案 0 :(得分:-1)
所以,我自己找到了答案,因为我偶然发现了一张表,其中解释说条件Remove="ALL"
也适用于修改和升级。
但这并不能解释随机性。
我在这个软件包中安装的产品也可以单独使用,我忘了检查。所以只有当有人试图升级他的版本并且他用相同的软件包安装所有组件时才会发生。
感谢所有想过解决问题的人;)