2015-06-22 45 views
1

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

我一直无法在执行顺序中移动足够高的停止操作,以避免在不导致交易错误的情况下进行对话。

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

回答

1

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

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

所以简短的回答是,你可能根本不需要自定义操作。 ServiceControl元素可用于停止和启动所有服务(不仅仅是使用ServiceInstall安装的服务),所以如果您执行ServiceControl元素以在卸载时停止服务,它可能会解决问题。从长远来看,我会远离命令行安装并使用ServiceInstall。

+0

是的。不幸的是,我被卡住(现在)与顶架,它没有实现安装的标准服务接口。如果安装被取消,我可以放弃一个停止服务的系统(不考虑即时/延迟差异),因为它很容易重新启动。如果我们长期保持高度,我将不得不考虑加强它以支持安装(https://github.com/Topshelf/Topshelf/issues/145) –