使用Windows Installer取消Windows服务安装/卸载会导致服务未完全安装/卸载

时间:2018-05-20 16:07:04

标签: windows service windows-installer visual-studio-setup-proje

我已经使用VS 2017为Windows服务创建了一个Windows Installer.windows服务中包含一个项目安装程序和服务安装程序类。当我在中途取消卸载过程时,该过程将删除Windows服务但不更新数据,因此下次运行安装程序时,我会选择修复或卸载Windows服务。现在尝试卸载Windows服务会出现错误,即指定的服务不存在",因此卸载过程将回滚。现在系统处于既不能安装也不能卸载服务的状态。为了能够完全删除服务,必须再次从命令行安装它,以便可以正确卸载它。有没有解决这个问题的方法?我想到使用服务安装表来确保即使在取消时也正确删除了服务,但是当我尝试安装服务时我得到了已安装服务的错误[Project Installer / Service Installer类执行此安装,我想]

1 个答案:

答案 0 :(得分:1)

首先确保您已完成所有自定义操作服务安装程序节点,特别是已填充“提交”和“回滚”节点自定义操作。这些自定义操作都可以一起工作,因此如果您错过了其中一个可能导致问题的操作。理论上,取消卸载应该已经注意到该服务已不再安装,应该重新安装。

如果这不是问题,那么它可能是一个错误。您可以做的最有用的修复是在安装程序类中覆盖base.Uninstall()并添加一些代码以在调用base.Uninstall()之前检查服务是否已实际安装。

Visual Studio安装项目是唯一使用代码安装服务的项目,它们是调用安装程序类方法的自定义操作。其他人都使用Windows Installer提供的ServiceInstall和ServiceControl表。

如果您不想完全切换到其他工具(如WiX),可以使用的一些选项包括:

  1. 如果您对服务有所了解,ServiceControl和ServiceInstall表不会太复杂。如果你从这里向下滚动到关于Visual Studio和安装服务的段落,那么有一篇文章和一个程序可以帮助你:
  2. http://www.installsite.org/pages/en/msi/tips.htm

    1. 您可以深入了解WiX以创建将安装服务的合并模块,以及所需的任何启动/停止操作。然后将该合并模块合并到Visual Studio安装程序中。不需要自定义操作(安装类是自定义操作,因此您不需要它们)。
相关问题