MSI应用程序无法卸载-错误1722



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

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

安装成功,应用程序运行良好。

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

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

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

如果我手动删除该服务,则不会看到任何错误,并且该服务正在被删除。不确定卸载失败的原因。

请阐明这一点。

卸载前停止服务 :在编译的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(。正是如此。这完全取决于您的分销规模。对于内部应用程序,您可以获得比真正的全球包裹分销更多的好处。这与部署的复杂性有关(请参阅页面下方的部分(。错误源太多了。

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


常见MSI问题 :我讨厌"推销"这些内容。它本质上是你在书中找不到的东西——这是有充分理由的。一些经验法则和意见是混乱的,但如果你想看看的话,这里是:我如何避免我的WiX/MSI部署解决方案中常见的设计缺陷?只有诚实的意见和实用的建议——没有所谓的"正确",但它应该有助于设置可靠性。有希望地

最新更新