Wix 安装程序停止服务并发出文件正在使用警告

Wix 安装程序停止服务并发出文件正在使用警告,wix,windows-installer,Wix,Windows Installer,我有一个WiX安装程序项目,它安装一个客户端应用程序和一个windows服务。设置为在安装过程中停止服务。但是,它仍然显示错误窗口“以下应用程序正在使用安装程序必须更新的文件”,并带有“重试”、“继续”和“取消”选项。如果选择“继续”并检查安装程序的windows事件日志,则会显示服务已停止并再次启动。StopServices元素处于建议的顺序位置 如何避免出现错误窗口 [编辑]我的理解是,文件的列出顺序无关紧要,因为windows installer会在复制任何文件之前停止服务。我想知道是否需

我有一个WiX安装程序项目,它安装一个客户端应用程序和一个windows服务。设置为在安装过程中停止服务。但是,它仍然显示错误窗口“以下应用程序正在使用安装程序必须更新的文件”,并带有“重试”、“继续”和“取消”选项。如果选择“继续”并检查安装程序的windows事件日志,则会显示服务已停止并再次启动。StopServices元素处于建议的顺序位置

如何避免出现错误窗口

[编辑]我的理解是,文件的列出顺序无关紧要,因为windows installer会在复制任何文件之前停止服务。我想知道是否需要首先列出服务exe。

最佳解决方案:使用“ServiceInstall”和“ServiceControl”元素确保服务正确停止/启动(以及安装/卸载)

事实上,在我们的安装程序中,应用程序和服务是从自定义安装程序代码中停止/启动的。但是,在运行自定义安装程序代码之前,会检查文件是否正在使用。因此,当安装程序启动时,文件正在使用中,但在安装程序尝试复制文件时,文件未被使用。对用户来说很烦人,但实际上不是问题。如果在安静模式下使用
msiexec.exe
安装,则安装成功


此外,在实际关机之前,从关机调用返回的服务还有另一个问题。(正如@PhilDW所评论的)。

您的服务可能在其停止处理程序中崩溃,并且有一个恢复步骤来重新启动自身。您是否对服务控制设置了Wait=yes?yes,Wait=yes。而且根据日志,它确实会在显示文件正在使用的窗口之后停止。如果我手动停止服务,它总是很快停止,所以我认为它不会崩溃。但我会进一步调查,根据日志停止服务只意味着进程已经完成了服务关闭协议。这并不意味着这个过程已经结束,所以它仍然可以保存正在使用的文件。此外,如果服务或流程有任何句柄打开,并且由于服务或流程尚不能完全丢弃,因此可能会影响某些事情。这些问题几乎总是与服务中的代码有关。好的-我将进一步调查服务。我可能需要一段时间才能得到一个结果——但我会在可能的情况下带着结果回来。