【问题标题】:Wix installer uninstaller issue when a bundled app is skipped跳过捆绑的应用程序时出现 Wix 安装程序卸载程序问题
【发布时间】:2018-01-25 22:25:36
【问题描述】:

我有一个捆绑的应用程序,比如 XYZ-1.0.0.1.exe,其中捆绑了应用程序 A-2.2.0.1.exe 和 B-1.2.0.1.exe。因此,当我们安装 XYZ 时,我们会在添加删除程序中列出 A 和 B。但是当我用 XYZ-1.0.0.2 升级 XYZ-1.0.0.1 时,它有 A-2.2.0.1.exe 和 B-1.2.0.2.exe,所以 A 相同并且已经安装,B 需要升级。实际上,我通过将安装条件设置为 false 来跳过 A 的安装,因为已经安装了相同的版本,并且在升级时只安装了 B。

成功升级后我无法卸载应用程序XYZ,它说一些包错误,只有当用于升级的源文件从机器中删除时才会发生这种情况。实际上在卸载包时必须从程序缓存中引用,我认为既然我们跳过了一个包缓存有问题。

我得到的错误如下“提示容器来源:WixAttachedContainer,路径:C:\Users\ABC\Desktop\XYZ-1.0.0.2.exe 无法解析文件源:C:\Users\ ABC\Desktop\XYZ-1.0.0.2.exe,错误:0x80070002。错误0x80070002:提示输入源失败(原始路径'C:\Users\ABC\Desktop\XYZ-1.0.0.2.exe')。获取失败容器:WixAttachedContainer 到工作路径:C:\Users\ABC\AppData\Local\Temp{b4a1c780-306c-40f0-83ad7},错误:0x80070002。“

仅当我将 XYZ.exe 复制到任何路径(例如桌面)并在安装后(跳过安装 A 或 B,因为已安装捆绑的相同版本的 A 或 B)并从保存的路径中删除安装文件 XYZ.exe 时才会出现此错误即这里的桌面。除非我卸载独立跳过的 A 或 B,否则我无法卸载。

还有另一种情况。

我有一个捆绑的应用程序,比如 XYZ-1.0.0.1.exe,其中捆绑了应用程序 A-2.2.0.1.exe 和 B-1.2.0.1.exe。 XYZ-1.0.0.2.exe,它有A-2.2.0.1.exe和B-1.2.0.2.exe。在 XYZ 的两个版本中,我们有相同的 A 版本。当我安装 XYZ-1.0.0.1.exe 时,我通过将安装条件设置为 false 来跳过 A-2.2.0.1.exe 的安装。所以安装了XYZ-1.0.0.1.exe,也安装了B-1.2.0.1。此外,当我升级到 XYZ-1.0.0.2 时,我需要安装所有 A 和 B。安装成功,现在我有 XYZ-1.0.0.2、A-2.2.0.1 和 B-1.2.0.2。现在,如果我从原始路径中删除 XYZ-1.0.0.2.exe 的安装文件并尝试卸载它会中断。

最初我认为包缓存问题是因为 A-2.2.0.1.exe 没有与 XYZ-1.0.0.2.exe 一起安装,因为我跳过了它,因为它已经可用。但是在第二种情况下知道跳过不是问题之后。因为在第二种情况下,A-2.2.0.1.exe 与 XYZ-1.0.0.2.exe 一起安装。

【问题讨论】:

  • 所以这是一个 WiX Burn 包,您实际上从包中删除了一个 MSI,然后在第一个 WiX 包之上重新安装?我一定是误会了,这是怎么回事?您之后看到的确切错误消息是什么?
  • 您能否从初始安装、升级和卸载中获取引导程序日志?
  • 这些不是 MSI,XYZ,A 和 B 是“exe”文件。我在 XYZ 中捆绑了 A 和 B。我不允许提供完整的日志。我得到的错误如下“提示容器来源:WixAttachedContainer,路径:C:\Users\ABC\Desktop\XYZ-1.0.0.2.exe 无法解析文件源:C:\Users\ABC\Desktop \XYZ-1.0.0.2.exe,错误:0x80070002。错误0x80070002:提示输入源时失败(原始路径'C:\Users\ABC\Desktop\XYZ-1.0.0.2.exe')。获取容器失败:WixAttachedContainer到工作路径:C:\Users\ABC\AppData\Local\Temp\{b4a1c780-306c-40f0-83ad7}\,错误:0x80070002。"
  • 仅当我将 XYZ 复制到任何路径(例如桌面)并在安装后(跳过安装 A 或 B,因为已安装捆绑的相同版本的 A 或 B)并从保存的路径中删除安装文件时,才会出现此错误即这里的桌面。除非我卸载独立跳过的 A 或 B,否则我无法卸载。
  • 我今天也遇到了另一个问题。我有一个捆绑的应用程序,比如 XYZ-1.0.0.1.exe,其中捆绑了应用程序 A-2.2.0.1.exe 和 B-1.2.0.1.exe在里面。我在 XYZ 的 UI 中有复选框来选择可以安装的应用程序。所以我使用 InstallCondition 为 false 从安装中跳过 B-1.2.0.1.exe。后来我手动安装了 B-1.2.0.1.exe。因此,安装了对应于 XYZ 的 A 和 B 无效。现在在卸载 XYZ 时,它会尝试卸载 A 和 B。删除所有用于安装的设置(XYZ 和 B)。当我尝试卸载 XYZ-1.0.0.1.exe 时。我在上面遇到了同样的错误。

标签: wix uninstallation


【解决方案1】:

同样的问题也花费了我大量的时间。使用变通方法解决了它。由于问题是“提示容器来源:WixAttachedContainer,路径:”,您可以在升级到程序数据或其他默认名称为 xyz 的路径时复制 exe 文件 XYZ-1.0.0.2。可执行程序。首先注册ResolveSource事件,然后添加以下代码。假设复制的exe路径为c:/XYZ/xyz.exe

private void OnResolveSource(object sender, ResolveSourceEventArgs e)
{   
Application.Engine.SetLocalSource(e.PackageOrContainerId, e.PayloadId, "c:/XYZ/xyz.exe");
e.Result = Result.Retry;
}

如果有人知道更好的答案,请帮助。

【讨论】:

    猜你喜欢
    • 2011-11-21
    • 2019-12-13
    • 2017-03-04
    • 2019-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多