1

我需要从新版本中覆盖旧版本的安装程序。我正在使用安装程序来安装 Windows 服务。Visual Studio 安装程序 2015。

我使用属性"RemovePreviousVersion"= true更改了安装程序,但在安装程序中出现错误,因为未卸载服务并尝试覆盖它。

错误 1001。System.ServiceProcess.ServiceInstaller 的 OnAfterInstall 事件处理程序发生异常 --CouslNot Star 计算机上的服务

在此处输入图像描述

4

1 回答 1

0

简短答案/建议:在安装/卸载/升级操作之前必须停止服务。MSI 中内置了一些机制来执行此操作。 显示如何使用 WiXServiceInstallServiceControl元素)完成此操作的热链接。

这是一个建议的 WiX 快速入门(对各种 WiX 和 MSI 主题有很多链接噪音 - 这是一个特别有机增长的链接答案)。


WiX使用适当的部署工具是最好的建议,例如 WiX。众所周知,Visual Studio 安装程序项目不灵活,并且在许多其他问题较短,列表形式)服务安装限制

特别是在这种情况下,您需要使用自定义操作来启动和停止服务(除非最新的 Visual Studio 安装程序项目中有我不熟悉的新结构 - 我认为没有)。自定义操作复杂且容易出错。适当的 MSI 工具使用内置的 MSI 结构来使服务安装更加可靠。

后处理:有些人在使用 Visual Studio 安装程序项目构建 MSI 后,使用Orca 或等效工具对他们的 MSI 进行后处理,以将构造添加到ServiceInstall ServiceControl表。不是火箭科学,但很麻烦,不推荐。

ServiceInstall & ServiceControl:本质上,您需要编写ServiceInstallServiceControl表,以便以可操作的方式安装、启动、停止和卸载服务。这里只有几个组合真正有意义。例如在卸载时停止和在安装时停止并启动。

WiX 示例此处的 WiX 快速入门建议和一些服务安装的 WiX 示例:


高级安装程序:以及用于服务安装的商业工具高级安装程序的两个链接。不要低估与您相关的商业工具。“有些工具只有在你的时间一文不值时才免费”。WiX 很棒,但可能很难学习并且总是需要时间:

于 2020-11-05T12:49:15.737 回答