我有一个由wix创建的安装,它安装了几个服务。这些服务是由自定义操作安装的,而不是由WIX安装的,原因有几个,无法更改。 安装工作正常,除非我升级,然后我收到FilesInUse对话框。我想在自定义操作中处理正在使用的文件。
有什么办法可以在InstallValidate之前运行自定义操作或禁用FilesInUse对话框?我使用的是通用的WIX UI。
我已尝试将其添加到InstallUIsequence,InstallExecutionSequence(在InstallValidate之前)并禁用重新启动管理器控件。什么都没有用......(也许我在其中一个序列中加错了)
我的自定义操作:
<CustomAction Id="StopServices"
BinaryKey="CustomActionsDLL"
DllEntry="StopServices"
Execute="immediate"
Return="check"/>
有什么建议吗?
答案 0 :(得分:1)
您需要使用自定义操作而不是内置WiX / MSI功能来安装服务并不意味着您无法使用WiX ServiceControl停止服务。如果Windows Installer发现服务将由ServiceControl停止,则它将不会在InstallValidate时调用FilesInUse。如果您的服务在某些方面有所不同,则可能无效 - 例如,共享公共Dll的子进程可能会导致FilesInUse对话框。我假设您已查看详细日志并查看正在使用的进程和文件。
您的自定义操作的问题在于它是您的代码,虽然它可能很好,但很难知道一个事实。此外,立即自定义操作的问题是它们没有提升并且可能无法停止服务,因此您的代码是否检查ControlService结果等等?