我在C#中开发了一个windows服务。我的项目有安装程序和安装项目。
安装项目,安装服务非常好,它没有任何问题,但是当我更改项目并创建其他设置时,新安装程序不会安装新服务,因为它已经存在! 是否可以通过任何方式创建安装程序,然后将其卸载并安装它?如何创建安装Windows服务以卸载然后安装服务?
回答
您可以通过正确配置MSI属性来实现。点击安装程序项目并按F4查看MSI的属性窗口。
当你进入属性,你可以看到两个类型是
Upgrade code
和Product Code
属性。每当您创建/发布新的Windows服务安装程序时,请务必保持相同的升级代码,但更改产品代码。更改
DetectNewerInstalledVersions
财产至true
。将
RemovePreviousVersions
设置为true
。现在将
version
号码更改为先前版本的更高版本(如果您以前的发行版本是1.0.2,请将新版本更改为1.0.3)。
当您安装MSI与上述设置,微星会检查是否有相同的升级代码安装任何其他产品,如果它发现一个产品,那么它会检查新安装具有更高版本。如果所有条件都满足,它将首先删除现有的(较早的)版本并安装较新的版本。
问题是升级VS2008设置和后来使用安装程序类和安装顺序是1)安装较旧的产品,较旧的产品,使用文件版本检查,运行安装自定义操作2)删除旧产品运行卸载自定义行动和摆脱不再使用的文件。 VS 2005不是这样的。因此,当服务已经存在时,安装该服务的安装程序类自定义操作正在运行。有时你可以恢复到VS 2005的升级机制,首先删除所有旧的安装文件,包括数据库等,所以请记住。您可以通过使用Orca,InstallExecuteSequence表修改MSI文件并在InstallValidate之后立即重新排序RemoveExistingProducts操作来完成此操作。否则,做这两个:
务必安装服务二进制到一个固定的位置(也就是说,不能阅览Program Files文件夹)。该服务的卸载自定义操作应具有NOT UPGRADINGPRODUCTCODE的条件,以便升级不会尝试卸载它(但是会直接卸载)。它需要位于固定位置,因为此升级解决方案不会安装或卸载服务 - 它只会更新二进制文件 - 但显然您不希望服务条目引用已更改位置的服务。
在升级中,对服务的安装自定义操作的条件为NOT PREVIOUSVERSIONSINSTALLED。这意味着它不会尝试重新安装服务(这就是为什么你会得到“已存在”错误),但是如果你增加了它的文件版本,它会更新exe文件。
如果你搜索的MSDN论坛设置为http://social.msdn.microsoft.com/Forums/en-US/home?forum=winformssetup许多PREVIOUSVERSIONSINSTALLED的职位都与这个问题做的,有更多的讨论和解释。
编辑:安装程序类不是必需的,因为Windows安装程序可以为你做所有这些,这就是为什么这只是VS安装项目的问题。转移到使用MSI的ServiceInstall和ServiceControl表的工具将使您无需任何代码来安装/卸载/停止/启动服务。
- 1. 安装/卸载Windows服务
- 2. 在安装Windows服务之前卸载
- 3. 如何安装Windows服务
- 4. Windows服务安装
- 5. 安装windows服务
- 6. Wix ServiceControl停止卸载服务安装它然后启动服务
- 7. 安装服务中的安装服务
- 8. 在卸载WIX中创建的安装程序时未卸下Windows服务
- 9. Windows服务的安装/卸载Windows中10
- 10. 服务安装程序在卸载时不会删除服务
- 11. 服务运行时,无法安装或卸载XAMPP服务! Apache
- 12. 无法安装Windows服务
- 13. 安装.NET Windows服务
- 14. Windows服务安装程序
- 15. Windows服务安装项目
- 16. 远程安装windows服务
- 17. 安装Windows服务无法
- 18. MSDeploy安装windows服务?
- 19. 远程安装Windows服务
- 20. VB.net Windows服务未安装
- 21. 安装的产品与卸载Windows服务时的安装源错误不符
- 22. Powershell在远程计算机上安装/卸载Windows服务
- 23. Windows服务的有条件安装/卸载
- 24. 批处理脚本安装或卸载.NET Windows服务
- 25. 如何在.NET中安装Windows服务?
- 26. 如何使用Java安装Windows服务?
- 27. 如何安装MongoDB Windows服务
- 28. 如何使用Qt安装Windows服务?
- 29. 以编程方式安装Windows服务
- 30. 以编程方式安装Windows服务
但安装有错误: 指定的服务已存在。 我想要这个安装卸载服务并安装相同名称的服务的新版本 – nabegheh95 2014-09-28 12:48:39
您将需要添加一个安装程序类到您的项目,在安装方法内停止现有的服务。 – Kurubaran 2014-09-28 13:12:43