【问题标题】:how do i create the Setup windows service to uninstall then install service?如何创建安装 Windows 服务以卸载然后安装服务?
【发布时间】:2017-06-02 22:19:36
【问题描述】:

我用 C# 开发了一个 Windows 服务。我的项目有安装程序和安装项目。
安装项目,安装服务很好,没有任何问题,但是当我更改项目并创建其他安装时,新安装不安装新服务,因为它已经存在! 有什么方法可以创建卸载服务然后安装它的设置?

【问题讨论】:

    标签: c# windows-installer installation


    【解决方案1】:

    问题在于 VS2008 设置和更高版本中的升级使用安装程序类和安装顺序,即 1)在旧产品上安装新产品,使用文件版本检查,运行安装自定义操作 2)删除运行卸载自定义操作的旧产品并摆脱不再使用的文件。 VS 2005 不是这样的。因此,当服务已经存在时,安装服务的安装程序类自定义操作正在运行。有时您可以恢复到 VS 2005 升级机制,该机制首先删除所有较旧的安装文件,包括数据库等,因此请记住这一点。您可以通过使用 Orca、InstallExecuteSequence 表修改 MSI 文件并在 InstallValidate 之后立即对 RemoveExistingProducts 操作重新排序来做到这一点。否则,请同时执行以下操作:

    1. 始终将服务二进制文件安装到固定位置(这意味着不是可浏览的 Program Files 文件夹)。服务的卸载自定义操作应具有 NOT UPGRADINGPRODUCTCODE 条件,以便升级不会尝试卸载它(但直接卸载会)。它需要位于固定位置,因为此升级解决方案不会安装或卸载服务 - 它只是更新二进制文件 - 但显然您不希望服务条目引用已更改位置的服务。

    2. 在升级中,服务的安装自定义操作的条件为 NOT PREVIOUSVERSIONSINSTALLED。这意味着它不会尝试重新安装服务(这就是您收到“已经存在”错误的原因),但如果您增加了其文件版本,它将更新 exe。

    如果您在 MSDN 设置论坛 http://social.msdn.microsoft.com/Forums/en-US/home?forum=winformssetup 中搜索 PREVIOUSVERSIONSINSTALLED,许多帖子都与此问题有关,并且有更多的讨论和解释。

    社论:不需要安装程序类,因为 Windows Installer 可以为您完成所有这些工作,这就是为什么这只是 VS 安装项目的问题。迁移到使用 MSI ServiceInstall 和 ServiceControl 表的工具将使您不再需要任何代码来安装/卸载/停止/启动服务。

    【讨论】:

    • 是否可以仅使用 Windows Installer(不是 Wix)来更新 Windows 服务?
    • 不知道什么意思。 WiX 和 VS 2008 设置都生成 MSI 文件,并且都可以构建 Windows Installer 升级。问题是 VS 2008 提供的用于安装服务的安装程序类在 VS 提供的唯一升级类型中很难处理 - 使用 RemovePreviousVersions 进行重大升级
    • 这个行得通,虽然答案不是那么清楚,但是当你理解了所说的,它就行了!
    【解决方案2】:

    您可以通过正确配置 MSI 属性来实现。点击 Installer 项目并按 F4 以查看 MSI 的属性窗口。

    1. 当您转到属性时,您会看到两种类型的属性,即Upgrade codeProduct Code。每次创建/发布新的 Windows 服务安装程序时,请确保保留相同的升级代码,但更改产品代码。

    2. DetectNewerInstalledVersions 属性更改为true

    3. RemovePreviousVersions 设置为true

    4. 现在将version 编号从上一版本更改为更高版本,如果您之前的版本是 1.0.2,请将新版本更改为 1.0.3。

    当您安装具有上述设置的 MSI 时,MSI 将检查是否有任何其他产品安装了相同的升级代码,如果找到产品,它将检查新安装的版本是否更高。如果满足所有条件,它将首先删除现有(旧)版本并安装新版本。

    【讨论】:

    • 但是安装有错误:指定的服务已经存在。我希望此安装卸载服务并安装具有相同名称的新版本服务
    • 您需要在项目中添加一个安装程序类,在 Install 方法中停止现有服务。
    猜你喜欢
    • 1970-01-01
    • 2011-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-30
    • 2010-11-01
    • 1970-01-01
    • 2010-10-17
    相关资源
    最近更新 更多