问题描述
我需要将安装程序的旧版本覆盖为较新的版本。我正在使用安装程序来安装Windows服务。 Visual Studio安装程序2015。
我使用属性“ RemovePrevIoUsversion” = true 更改了安装程序,但是由于未卸载服务而导致安装程序出错并尝试覆盖此设置。
错误1001。计算机上System.ServiceProcess.ServiceInstaller --CouslNot Star服务的OnAfterInstall事件处理程序中发生了异常
解决方法
简短答案/建议 :必须先停止服务,然后再进行安装/卸载/升级操作。 MSI内置了一些机制来做到这一点。 Hotlink to show how this is done using WiX(
ServiceInstall
和ServiceControl
元素)。Here is a proposed WiX quick start(链接噪声很大 各种各样的WiX和MSI主题-这是临时性的有机增长 链接答案)。
- Hello WiX
- Hello WiX Visual Studio Votive(也许先检查底部的标记)
WiX :Use a proper deployment tool是最佳建议,例如WiX。已知Visual Studio安装程序项目不灵活,并且在many other problems(shorter,list form)之间限制了服务安装。
特别是在这种情况下,您需要使用自定义操作来启动和停止服务(除非最新的Visual Studio安装程序项目中有我不熟悉的新结构-我认为没有)。 Custom actions are complex and error prone。正确的MSI工具使用内置的MSI结构来使服务安装更加可靠。
后处理 :有些人使用Orca or equivalent tools对MSI进行后处理,以将构造添加到ServiceInstall,ServiceControl使用Visual Studio安装程序项目构建MSI之后创建表格。不是火箭科学,而是麻烦而不推荐。
ServiceInstall 和 ServiceControl :本质上,您需要编写ServiceInstall和{{3 }}表,以便以可操作的方式安装,启动,停止和卸载服务。实际上,只有少数几种组合才有意义。例如停止卸载并停止并开始安装。
WiX示例 :How to install and start a Windows Service using WiX和一些服务安装的WiX示例:
- WiX quick start suggestions here
- https://github.com/Robs79/How-to-create-a-Windows-Service-MSI-Installer-Using-WiX
高级安装程序 :以及用于服务安装的商业工具Advanced Installer的两个链接。不要低估与您相关的商业工具。 “仅当您的时间毫无价值时,某些工具才是免费的” 。 WiX很棒,但是很难学习并且总是需要时间: