我已经升级了一个 [.vdproj MSI generator project built into VS2008] System.Configuration.Install.Installer with a ServiceProcessInstaller
and a ServiceInstaller
from Visual Studio 2005 to 2008. 安装程序类没有后果的自定义(即,不尝试启动或停止服务或注册儿童)
RemovePreviousVersions
设置为true
,我正在更改Version
and ProductCode
。这会在安装过程中触发错误:
“错误 1001:指定的服务已存在”
谷歌搜索产生的东西(但直到现在还没有):-谷歌“指定的服务已经存在”
我迄今为止看到的最有用的一个是http://forums.msdn.microsoft.com/en-US/winformssetup /thread/b2d1bd22-8499-454e-9cec-1e42c03e2557/
但这并不能回答基本问题:-
鉴于用户可以选择:
a) 相同的安装位置
或 b) 不同的安装位置,
为了确保卸载旧服务并安装新服务,明智地做出的最小代码更改是什么?或者,对于将具有相同名称(即签名)的相同服务的 v1.0.1 升级到 v1.0.2 的基本场景,是否需要更改代码来解决此问题
(AIUI 强命名只有在旧安装程序中有重要的卸载步骤而新安装程序中没有时才会发挥作用。)
我在 VS 2008 中生成了一个新的安装程序,但效果并不好。
目前,我的解决方法是停止更新Version
and ProductCode
,当用户被告知他们已经安装了一个版本时,强制用户手动卸载。
附录感谢divo 的探测:虽然可能可行的最简单的黑客攻击是说“如果调用安装步骤并且它是升级,请先调用服务的卸载步骤”,但我想要一个正式的官方祝福答案!(例如,在升级期间重命名服务时,简单的 hack 如何应对?)