我已经使用WIX 3.11创建了MSI。我对安装程序进行了一些自定义,以将应用程序安装在自定义文件夹中。我还在HKLM \ Software下编写注册表值的安装路径。
我正在为一个用例读取批处理文件中的注册表值。
安装成功,应用程序运行正常。
但是在卸载时,我面临以下问题-
弹出窗口,弹出消息-继续安装之前,应关闭以下应用程序:[MyApplication]
在删除服务的卸载日志中,我看到以下错误-错误1722。此Windows Installer软件包存在问题。作为安装程序一部分运行的程序未按预期完成。请与您的支持人员或包装供应商联系。
如果我手动删除该服务,则不会看到任何错误,并且该服务将被删除。不知道为什么卸载失败。
请对此进行说明。
答案 0 :(得分: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?只是诚实的意见和实用建议-不能声称是“正确的”,但这应该有助于提高可靠性。希望如此。