我已经升级了[VS2008内置的[.vdproj MSI生成器项目] System.Configuration.Install.Installer,其中ServiceProcessInstaller
和ServiceInstaller
从Visual Studio 2005到2008.没有自定义安装程序类的结果(即,不尝试启动或停止服务或注册子项)
RemovePreviousVersions
设置为true
,我正在更改Version
和ProductCode
。这会在安装过程中触发错误:
“错误1001:指定的服务已存在”
谷歌搜索产生的东西(但直到现在才开始): - Google for "The specified service already exists"
我见过的最有用的是http://forums.msdn.microsoft.com/en-US/winformssetup/thread/b2d1bd22-8499-454e-9cec-1e42c03e2557/
但是,这并没有回答基本问题: -
鉴于用户可以选择:
a)与安装位置相同的安装位置
或b)不同的安装位置
什么是最小的代码更改是否合理地确保旧服务被卸载并且新服务被安装?或者是否需要进行代码更改以解决此问题,以便将同一服务的v1.0.1升级到v1.0.2的基本方案具有相同的名称(即签名)
(如果在新安装程序中有一个重要的卸载步骤,那么强大的命名只会在新的安装程序中发挥作用。)
我在VS 2008中生成了一个新的安装程序,但它没有更好的效果。
目前,我的解决方法是停止更新Version
和ProductCode
,强制用户在被告知已安装版本时手动卸载。
附录感谢divo's探测:虽然最简单的黑客攻击可能是“如果调用安装步骤并进行升级,请首先调用卸载步骤”,我想一个正确的正式祝福的答案! (例如,在升级过程中重命名服务时,简单的黑客如何应对?)
答案 0 :(得分:5)
答案 1 :(得分:1)
您的服务(设置)是否提供了卸载服务的自定义操作?
升级意味着在安装新产品之前卸载以前安装的产品。我认为错误的原因是旧服务无法删除。
如果您的服务是用.NET编写的,您可能会发现本文很有用: http://www.codeproject.com/KB/install/InstallService.aspx