windows安装程序-如何使用MSI软件包卸载顶级服务



我有几个使用topshelf开发的服务,这些服务是使用InstallShield中创建的MSI(使用基本MSI)安装的。我们使用传递install参数的自定义操作来安装它们。当谈到卸载时,我们使用一个传递卸载参数的自定义操作(我们也有适当启动和停止的自定义操作)。所有这些都在起作用,但用户会看到一个对话框,要求他们关闭这些服务,否则可能需要重新启动。但是,如果用户选择继续,我们的自定义操作将运行,停止并卸载服务。

我无法在执行序列中将停止操作移动到足够高的位置,以避免在不导致非事务错误的情况下出现对话框。

有什么办法可以摆脱那个对话框吗?

要使用自定义操作停止服务,您需要在InstallValidate之前进行该操作,这意味着它必须是立即的,因此如果安装被取消或失败,则会变得很棘手,因为这样您就可以使用停止的服务离开系统。

真正的解决方案是,您应该使用ServiceInstall元素安装服务,并使用ServiceControl元素停止/启动/删除它们。在卸载时,如果Windows安装程序发现您要停止服务(使用ServiceControl),则它不会执行FilesInUse对话框。

因此,简单的答案是,您可能根本不需要自定义操作。ServiceControl元素可用于停止和启动所有服务(而不仅仅是使用ServiceInstall安装的服务),因此,如果在卸载时使用ServiceControl元素停止服务,则可能会解决问题。从长远来看,我将不再使用命令行安装,而是使用ServiceInstall。

最新更新