我已经升级了[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
关于卸载Windows服务,我们对stackoverflow有很多疑问.
尝试了所有这些后,我仍然无法在新版本的安装上卸载Windows服务.
我使用安装和部署项目来安装/卸载我的项目,该项目有一个Windows服务和一些其他项目.
在安装较新版本的过程中,所有其他项目都已成功重新安装,但Windows服务项目无法重新安装,并说:
错误1001:指定的服务已存在.
我引用了此链接并尝试将代码添加到我的安装自定义操作以停止服务.如果我正确理解了这个链接的答案,我已经把代码停在服务的projectInstaller.cs文件中的服务:
public override void Install(IDictionary stateSaver)
{
ServiceController sc = new ServiceController("SareeManagerNotifications");
if (sc.Status == ServiceControllerStatus.Running)
sc.Stop();
base.Install(stateSaver);
}
Run Code Online (Sandbox Code Playgroud)
自定义操作窗格如下所示:

突出显示的部分是服务.
我也经历了这个答案,它说将自定义动作条件设置为NOT PREVIOUSVERSIONSINSTALLED.

这对我不起作用.我哪里错了?
提前致谢 :)