Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wix 卸载不适用于MSI应用程序-错误1722_Wix_Windows Installer - Fatal编程技术网

Wix 卸载不适用于MSI应用程序-错误1722

Wix 卸载不适用于MSI应用程序-错误1722,wix,windows-installer,Wix,Windows Installer,我已经用WIX3.11创建了MSI。我对安装程序进行了一些自定义,以便将应用程序安装在自定义文件夹中。我还在HKLM\Software下将安装路径写入注册表值 我正在为我的一个用例读取批处理文件中的注册表值 安装成功,应用程序运行正常 但在卸载时,我面临以下问题- 卸载窗口弹出消息-在继续安装之前,应关闭以下应用程序:[MyApplication] 在删除服务时的卸载日志中,我看到以下错误-错误1722。此Windows Installer软件包有问题。作为安装程序一部分运行的程序未按预期完成。

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

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

安装成功,应用程序运行正常

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

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

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

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

请说明这一点。

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

自定义操作失败:也可能有一个自定义操作试图运行一个批处理文件,该批处理文件在您尝试运行时已卸载
这可能是一个自定义操作,不应在卸载时运行(条件错误),或者您对其排序不正确,因此在自定义操作成功运行之前,批处理文件已从磁盘中消失(由于卸载)。您需要在安装/取消安装序列中更早地移动自定义操作,或对其进行更好的调整,以使其永远不会在卸载时运行。这两个问题都很常见。请注意,无法对自定义操作设置条件以使其意外运行是很常见的。通常,它们在主要升级卸载过程中不受欢迎地运行

批处理文件CAs:我认为在自定义操作中使用批处理文件是一种MSI反模式。基本上没有错误处理,因此没有对错误情况的管理和恢复。而且通常不支持MSI回滚。C++自定义操作在我看来是最好的(最小依赖性、良好的可调试性、全功能语言、大到金属API)。就这么说的。这完全取决于你的发行量有多大。对于内部应用,您可以获得比真正的全球包分发更多的好处。这与(请参阅本页下面一节)有关。错误源太多了

WiX服务安装:也许可以从雷纳·斯特罗佩克中看到这个动手操作WiX标记示例:。请查收 这个



常见的MSI问题:我讨厌“推销”这一内容。它本质上是你在书中找不到的东西——而且有很好的理由。一些经验法则和观点是混乱的,但如果你想查看的话,这里就是:只是诚实的意见和实用的建议——没有所谓的“正确”,但它应该有助于建立可靠性。希望如此。

谢谢你@Stein。我已经编写了自定义操作(使用批处理文件)来停止和删除其中一个服务。删除服务后,我将使用另一个自定义操作删除install Dir。由于以下原因,卸载程序无法删除服务-卸载程序在调用此自定义操作之前删除所有文件(包括删除服务的批处理文件)。在卸载日志中,我可以看到允许卸载共享组件的消息:{97139BA1-3F3B-4CF5-ADC7-9188F7906A3}。其他客户端存在,但安装到不同的位置我已经在一台新的机器上安装了MSI,即使我看到了上述问题。不知道卸载程序在删除文件时看起来如何,认为存在其他客户端,但安装到了不同的位置。相同的安装程序在预定义路径中安装时工作正常。我已更改在自定义路径中安装,现在卸载程序无法按预期工作。MSI完全支持停止和删除服务,您不应求助于批处理文件来实现这一点。您是否访问了上面Rainer Stropek样本的链接。您也不应该使用自定义操作删除安装目录-这将在您执行“普通”操作后自动发生。从日志文件消息来看,您还可能弄乱了组件引用。我建议您在干净的虚拟机上进行测试。以及它是如何被设定为一个绝对的安装路径的石头。