如何创建安装窗口服务来卸载然后安装服务
本文关键字:服务 安装 窗口 卸载 然后 何创建 创建 | 更新日期: 2023-09-27 18:24:54
我用C#开发了一个windows服务。我的项目有安装程序和安装程序项目
安装项目,安装服务很好,没有任何问题,但当我更改项目并创建其他安装程序时,新的安装程序不会安装新的服务,因为它已经存在了!!!有没有任何方法可以创建安装程序,卸载服务然后安装它?
问题是,VS2008设置和更高版本中的升级使用安装程序类和安装顺序,即1)在旧产品上安装新产品,使用文件版本检查,运行安装自定义操作2)删除运行卸载自定义操作的旧产品,并清除不再使用的文件。VS 2005不是这样的。因此,当服务已经存在时,安装服务的安装程序类自定义操作正在运行。有时,您可以恢复到VS2005升级机制,该机制首先删除所有旧安装的文件,包括数据库等,因此请记住这一点。您可以通过使用Orca、InstallExecuteSequence表修改MSI文件,然后将RemoveExistingProducts操作重新排序为InstallValidate之后立即执行。否则同时执行以下操作:
-
始终将服务二进制文件安装到固定位置(这意味着不能浏览Program Files文件夹)。服务的卸载自定义操作应具有NOT UPGRADINGPRODUCTCODE的条件,以便升级不会尝试卸载它(但直接卸载会)。它需要位于固定位置,因为此升级解决方案不安装或卸载服务,只更新二进制文件,但显然您不希望服务条目引用已更改位置的服务。
-
在升级中,服务的安装自定义操作的条件为NOT PREVIOUSVERSIONSINSTALLED。这意味着它不会尝试重新安装服务(这就是为什么你会得到"已经存在"的错误),但如果你增加了exe的文件版本,它会更新exe。
如果搜索MSDN安装论坛http://social.msdn.microsoft.com/Forums/en-US/home?forum=winformssetup对于以前的报道,许多帖子都与这个问题有关,还有更多的讨论和解释。
社论:安装程序类不是必需的,因为Windows安装程序可以为您完成所有这些,这就是为什么这只是VS安装项目的问题。移动到使用MSIs ServiceInstall和ServiceControl表的工具将使您不再需要任何代码来安装/卸载/停止/启动服务。
您可以通过正确配置MSI属性来完成此操作。单击安装程序项目并按F4查看MSI的属性窗口。
-
当您转到属性时,您可以看到两种类型的属性,即
Upgrade code
和Product Code
。每次创建/发布新的Windows服务安装程序时,请确保保留相同的升级代码,但更改产品代码。 -
将
DetectNewerInstalledVersions
属性更改为true
。 -
将
RemovePreviousVersions
设置为true
。 -
现在,将
version
编号更改为上一版本的更高版本,如果您的上一版本是1.0.2,则将新版本更改为1.0.3。
当您使用上述设置安装MSI时,MSI将检查是否有其他安装了相同升级代码的产品,如果找到产品,则会检查新安装的版本是否更高。如果满足所有条件,它将首先删除现有(旧)版本并安装新版本。