我有一个VS2008应用程序,其中包括一个服务项目(我称之为ServiceProject).我将安装项目(InstallationProject)设置为RemovePreviousVersions.此外,我为InstallationProject 设置了自定义操作,从ServiceProject安装,提交,回滚和卸载主输出.
有时,当我构建新版本的安装程序时,我可以安装而不会出错.通常,当我到达设置服务的位置(在安装程序中输入用户名和密码)时 - 它会因错误"指定的服务已存在"而失败.
我不知道为什么它不一致,虽然我认为可能有某种服务签名,如果服务未经修改,它可以成功删除它,但经过修改后,它无法识别服务.但是,我很少对服务进行修改,所以我怀疑是这样的.
如何在没有此错误的情况下使安装程序成功更新服务? 我的解决方法是手动进入控制面板,卸载以前的应用程序,然后运行安装程序.
我已经升级了[VS2008内置的[.vdproj MSI生成器项目] System.Configuration.Install.Installer,其中a ServiceProcessInstaller和a ServiceInstaller从Visual Studio 2005到2008.安装程序类没有任何自定义的后果(即,没有尝试启动或停止服务或注册儿童)
RemovePreviousVersions设置为true,我正在改变Version和ProductCode.这会在安装期间触发错误:
"错误1001:指定的服务已存在"
谷歌搜索产生的东西(但直到现在才开始): - 谷歌"指定的服务已经存在"
我迄今看到的最有用的是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的探测:虽然最简单的黑客攻击可能是"如果调用安装步骤及其升级,请首先调用卸载步骤",我想要一个正确的正式祝福答案!(例如,在升级过程中重命名服务时,简单的黑客如何应对?)
installer windows-installer windows-services uninstallation visual-studio-2008
installer ×2