当前位置:  开发笔记 > 编程语言 > 正文

当我安装新版本的软件时,如何消除"指定的服务已存在"?

如何解决《当我安装新版本的软件时,如何消除"指定的服务已存在"?》经验,为你挑选了2个好方法。

我有一个VS2008应用程序,其中包括一个服务项目(我称之为ServiceProject).我将安装项目(InstallationProject)设置为RemovePreviousVersions.此外,为InstallationProject 设置自定义操作,从ServiceProject安装,提交,回滚和卸载主输出.

有时,当我构建新版本的安装程序时,我可以安装而不会出错.通常,当我到达设置服务的位置(在安装程序中输入用户名和密码)时 - 它会因错误"指定的服务已存在"而失败.

我不知道为什么它不一致,虽然我认为可能有某种服务签名,如果服务未经修改,它可以成功删除它,但经过修改后,它无法识别服务.但是,我很少对服务进行修改,所以我怀疑是这样的.

如何在没有此错误的情况下使安装程序成功更新服务? 我的解决方法是手动进入控制面板,卸载以前的应用程序,然后运行安装程序.



1> Ryan..:

除了确保文件版本不同,StingyJack提到你有另一个问题.来自VS文档(抱歉,不在线)

如果已在应用程序的安装项目中设置了安装和卸载自定义操作,并且已在Visual Studio 2005中启用了RemovePreviousVersions属性,则在升级期间将卸载以前版本的产品.但是,此行为在Visual Studio 2008中更改如下:

在Visual Studio 2005中,从v1.0.0升级到v1.0.1时,自定义操作的调用如下:

v1.0.0自定义操作卸载()

v1.0.1自定义操作Install()

在Visual Studio 2008中,未调用卸载操作,如下所示:

v1.0.1自定义操作Install()

如果您依赖于旧行为创建了自定义操作,则需要修改新行为的代码.此行为更改仅影响更新,而不影响卸载.

因此,您正在使用自定义操作安装服务 - 但是在升级时,未按预期调用卸载部件,并且您尝试在现有的正在运行的版本上进行安装.

认为当它要求重启时,因为它无法在运行时更新服务文件.

两种选择: -

将代码添加到"安装/提交"自定义操作以停止服务,等待安装程序更换服务文件,然后重新启动服务.请参阅PonalSuper3在此主题中的答案

通过使用Orca将InstallExecuteSequence.RemoveExistingProducts更改为紧随其后的.InstallInitialize - 通常将.RemoveExistingProducts设置为1525,将VS2008的行为恢复到它在VS2005中的工作方式(在新版本安装之前调用旧版本卸载自定义操作)但请检查您的个人MSI.

我添加了一个脚本,而不是添加到构建过程中以更改MSI的InstallExecuteSequence



2> Tomer Pintel..:

将"Not(已安装或PREVIOUSVERSIONSINSTALLED)"放入"自定义操作" - >"安装条件"属性中.

推荐阅读
手机用户2402852307
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有