我已经使用VS 2017为Windows服务创建了一个Windows Installer.windows服务中包含一个项目安装程序和服务安装程序类。当我在中途取消卸载过程时,该过程将删除Windows服务但不更新数据,因此下次运行安装程序时,我会选择修复或卸载Windows服务。现在尝试卸载Windows服务会出现错误,即指定的服务不存在",因此卸载过程将回滚。现在系统处于既不能安装也不能卸载服务的状态。为了能够完全删除服务,必须再次从命令行安装它,以便可以正确卸载它。有没有解决这个问题的方法?我想到使用服务安装表来确保即使在取消时也正确删除了服务,但是当我尝试安装服务时我得到了已安装服务的错误[Project Installer / Service Installer类执行此安装,我想]
答案 0 :(得分:1)
首先确保您已完成所有自定义操作服务安装程序节点,特别是已填充“提交”和“回滚”节点自定义操作。这些自定义操作都可以一起工作,因此如果您错过了其中一个可能导致问题的操作。理论上,取消卸载应该已经注意到该服务已不再安装,应该重新安装。
如果这不是问题,那么它可能是一个错误。您可以做的最有用的修复是在安装程序类中覆盖base.Uninstall()并添加一些代码以在调用base.Uninstall()之前检查服务是否已实际安装。
Visual Studio安装项目是唯一使用代码安装服务的项目,它们是调用安装程序类方法的自定义操作。其他人都使用Windows Installer提供的ServiceInstall和ServiceControl表。
如果您不想完全切换到其他工具(如WiX),可以使用的一些选项包括:
http://www.installsite.org/pages/en/msi/tips.htm