【问题标题】:Uninstall is not working for MSI application - Error 1722MSI 应用程序无法卸载 - 错误 1722
【发布时间】:2019-01-14 21:07:41
【问题描述】:

我使用 WIX 3.11 创建了 MSI。我对安装程序进行了一些自定义,以将应用程序安装在自定义文件夹中。我还在 HKLM\Software 下编写注册表值的安装路径。

我正在为我的一个用例读取批处理文件中的注册表值。

安装成功,应用运行正常。

但在卸载时,我面临以下问题 -

卸载窗口弹出消息 - 在继续安装之前应关闭以下应用程序:[MyApplication]

在删除服务时的卸载日志中,我看到以下错误 - 错误 1722。此 Windows 安装程序包有问题。作为设置的一部分运行的程序未按预期完成。请联系您的支持人员或软件包供应商。

如果我手动删除该服务,则看不到任何错误并且该服务将被删除。不知道为什么卸载失败。

请对此有所了解。

【问题讨论】:

    标签: wix windows-installer


    【解决方案1】:

    卸载前停止服务:在编译的 MSI 中,ServiceControl table 中有哪些条目?您需要在删除其可执行文件之前停止该服务。请参阅下面链接的 WiX 服务安装示例。

    自定义操作失败:您也有可能有一个自定义操作尝试运行在您尝试运行时已卸载的批处理文件。 This can be a custom action that should not run on uninstall (conditioning is wrong), or you have sequenced it incorrectly so the batch file is gone from disk - courtesy of the uninstall - before the custom action can run successfully。您需要在安装/卸载序列中更早地移动自定义操作,或者更好地调整它,使其永远不会在卸载时运行。这两个问题都很常见。请注意,通常无法设置自定义操作,因此它们会意外运行。它们经常在重大升级卸载期间运行,这是不受欢迎的。

    批处理文件 CA :值得一提的是 - 而且没有冒犯:在我看来,在自定义操作中使用批处理文件是 MSI 反模式。基本上零错误处理,因此没有管理和从错误条件中恢复。并且通常没有 MSI 回滚支持。在我看来,C++ 自定义操作是最好的(最小的依赖关系、良好的可调试性、功能齐全的语言、大型实用 API)。就这样被提及。这完全取决于您的分布有多大。对于内部应用程序,除了真正的全球包分发之外,您还可以获得更多。这与the complexity of deployment 有关(请参阅页面下方的部分)。错误来源太多了。

    WiX 服务安装:也许可以看到 Rainer Stropek 的这个 WiX 标记示例 WiXSamples - github.com/rstropek。请检查 ServiceControl element


    常见的 MSI 问题:我讨厌“推销”这个内容。它本质上是你在书中无法轻易找到的东西——而且有充分的理由。一些经验法则和意见杂乱无章,但如果你想检查一下,这里是:How do I avoid common design flaws in my WiX / MSI deployment solution? 只是诚实的意见和实用的建议 - 没有声称是“正确的”,但它应该有助于建立可靠性。希望。

    【讨论】:

    • 谢谢@Stein。我已经编写了自定义操作(这使用了批处理文件)来停止和删除其中一项服务。删除服务后,我将使用另一个自定义操作删除安装目录。由于以下原因,卸载程序无法删除服务 - 卸载程序在调用此自定义操作之前删除所有文件(包括删除服务的批处理文件)。在卸载日志中,我可以看到消息允许卸载共享组件:{97139BA1-3F3B-4CF5-ADC7-9188F79006A3}。其他客户端存在,但安装到不同的位置
    • 我已经在一台新机器上安装了 MSI,即使这样我也看到了上述问题。想知道卸载程序如何删除认为其他客户端存在但安装到不同位置的文件。
    • 同一安装程序在预定义路径中安装时可以正常工作。我已更改以自定义路径安装,现在卸载程序无法按预期工作。
    • MSI 完全支持服务停止和删除,您不应求助于批处理文件来实现此目的。您是否访问过上面 Rainer Stropek 示例的链接? Adding the ServiceControl element and setting the service to stop and start on install and stop and delete on uninstall should solve your problems and eliminate the batch file。您也不应该使用自定义操作删除安装目录 - 一旦您执行“vanilla”操作,这将自动发生。
    • 从该日志文件消息来看,您似乎也弄乱了组件引用。我建议您在干净的虚拟机上进行测试。还有please read about the component GUID concept 以及它是如何为绝对安装路径设置的。
    猜你喜欢
    • 2022-07-23
    • 2016-03-08
    • 2013-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-01
    • 2018-11-06
    • 2019-02-15
    相关资源
    最近更新 更多