4

问题:

我制作了一个 Windows Service i VS2010 (C#) 和一个相应的 .msi 来安装和启动它。版本、产品代码、升级代码等设置正确。RemovePreviousVersions 设置为 true。工作正常。

现在我想做一个新版本的服务,我希望更新后的 .msi 来更新服务,而不需要用户先手动卸载旧服务。

我要做的是:

  1. 我更新了我的服务的源代码
  2. 在 .msi 项目中,我更改了版本号和 ProductCode(同时保持 UpgradeCode 不变)
  3. 我重建整个事情。

但是,当我之后启动更新的 .msi 时,它会失败并显示以下消息:“错误 1001 .... 服务的实例已经在运行”。

问题:

  • 为什么在安装更新版本之前没有自动卸载服务?

  • 我该怎么做才能让它发挥作用?

4

1 回答 1

1

对于这种情况,Windows Installer 5.0 的更改并不重要,它们指的是故障配置。

由于从控制面板手动卸载应用程序会删除该服务,因此很明显安装新版本不会删除以前的服务。要检查为什么需要创建详细日志并检查 RemoveExistentProducts 标准操作。要创建日志,请使用此命令

msiexec /i {msi 路径} /l*v file.log

您应该知道您必须更改前三个版本号之一,以确保操作系统将新软件包视为升级,第四个被忽略。此外,您应该确保软件包具有相同的安装类型,即每个用户或每个机器。如果安装类型不同,则跳过升级。

于 2012-11-03T10:46:51.200 回答