【问题标题】:Cannot update Windows service with .msi无法使用 .msi 更新 Windows 服务
【发布时间】:2012-10-22 04:02:27
【问题描述】:

问题:

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

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

我要做的是:

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

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

问题:

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

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

【问题讨论】:

  • 停止服务运行。 (net stop servicename 应该测试这是否是问题)
  • 这没有多大帮助。然后我得到“错误1001。指定的服务已经存在”。注意:如果我手动卸载应用程序(通过控制面板中的添加/删除程序),服务会停止并正常卸载。
  • 在 MSI v5.0 中添加了对服务配置的几处更改。您可能想查看 MSDN 文档中的 Using Services Configuration。我不记得这些是否能解决像你这样的问题。
  • 您确定升级过程中卸载了之前的版本吗?如果不是,那么在这种情况下,您尝试在现有版本上安装新版本 - 这可能会导致类似的错误。

标签: visual-studio-2010 windows-services windows-installer


【解决方案1】:

Windows Installer 5.0 的更改与这种情况无关,它们指的是故障配置。

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-16
    • 1970-01-01
    • 2018-04-13
    • 1970-01-01
    • 2013-09-30
    • 2021-11-05
    • 2018-07-07
    相关资源
    最近更新 更多