我已经使用 VS 2017 为 Windows 服务创建了一个 Windows Installer。Windows 服务内部有一个项目安装程序和服务安装程序类。当我中途取消卸载过程时,该过程会删除 Windows 服务,但不会更新数据,因此下次运行安装程序时,我会看到修复或卸载 Windows 服务的选项。现在尝试卸载 Windows 服务会出现“指定的服务不存在”的错误,因此卸载过程会回滚。现在系统处于既不能安装也不能卸载服务的状态。为了能够完全删除该服务,必须从命令行再次安装它,以便可以正确卸载它。有办法解决这个问题吗?我想过使用服务安装表来确保即使在取消时也能正确删除该服务,但随后在尝试安装服务时出现服务已安装的错误[项目安装程序/服务安装程序类执行此安装,我认为]
首先确保您已完成所有自定义操作服务安装程序节点,特别是填充了提交和回滚节点自定义操作。这些自定义操作都是协同工作的,因此如果您错过了其中一项操作,则可能会导致问题。理论上,取消卸载应该注意到该服务不再安装,应该重新安装。
如果这不是问题,那么它可能是一个错误。修复此问题最有用的方法是覆盖安装程序类中的 base.Uninstall() 并添加一些代码以在调用 base.Uninstall() 之前检查服务是否实际安装。
Visual Studio 安装项目是唯一使用代码安装服务的项目,它们是调用安装程序类方法的自定义操作。其他人都使用 Windows Installer 提供的 ServiceInstall 和 ServiceControl 表。
如果您不想完全切换到 WiX 等其他工具,可以使用以下一些选项:
- 如果您对服务有所了解,ServiceControl 和 ServiceInstall 表并不太复杂。如果您从这里向下滚动到有关 Visual Studio 和安装服务的段落,可以找到一篇文章和一个程序来帮助解决此问题:
http://www.installsite.org/pages/en/msi/tips.htm http://www.installsite.org/pages/en/msi/tips.htm
- 您可以深入研究 WiX 来创建一个合并模块,该模块将安装服务以及所需的任何启动/停止操作。然后将该合并模块合并到您的 Visual Studio 设置中。不需要自定义操作(安装类是自定义操作,因此您不需要它们)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)