在WIX中的InstallValidate之前运行自定义操作

时间:2017-01-22 12:39:32

标签: service wix windows-installer custom-action wix3.5

我有一个由wix创建的安装,它安装了几个服务。这些服务是由自定义操作安装的,而不是由WIX安装的,原因有几个,无法更改。 安装工作正常,除非我升级,然后我收到FilesInUse对话框。我想在自定义操作中处理正在使用的文件。

有什么办法可以在InstallValidate之前运行自定义操作或禁用FilesInUse对话框?我使用的是通用的WIX UI。

我已尝试将其添加到InstallUIsequence,InstallExecutionSequence(在InstallValidate之前)并禁用重新启动管理器控件。什么都没有用......(也许我在其中一个序列中加错了)

我的自定义操作:

<CustomAction Id="StopServices"
              BinaryKey="CustomActionsDLL"
              DllEntry="StopServices"
              Execute="immediate"
              Return="check"/>

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

您需要使用自定义操作而不是内置WiX / MSI功能来安装服务并不意味着您无法使用WiX ServiceControl停止服务。如果Windows Installer发现服务将由ServiceControl停止,则它将不会在InstallValidate时调用FilesInUse。如果您的服务在某些方面有所不同,则可能无效 - 例如,共享公共Dll的子进程可能会导致FilesInUse对话框。我假设您已查看详细日志并查看正在使用的进程和文件。

您的自定义操作的问题在于它是您的代码,虽然它可能很好,但很难知道一个事实。此外,立即自定义操作的问题是它们没有提升并且可能无法停止服务,因此您的代码是否检查ControlService结果等等?