【问题标题】:Best way to install .NET Service in MSI so that it is updatable?在 MSI 中安装 .NET 服务以使其可更新的最佳方式?
【发布时间】:2010-09-15 19:39:32
【问题描述】:

我有一个使用 InstallShield 2009 构建的 MSI 安装程序,它通过在包含服务 exe 的组件上将“.NET 安装程序类”设置为“是”来安装 .NET 服务。 包含文件和 exe 的基本安装安装正常。我创建了一个小的更新 MSP,它正在更新原始安装中的服务 exe 文件。 当我在包含基本安装的系统上运行 MSP 时,我收到错误 1001,因为它试图在小更新 MSP 安装期间重新安装服务。

Flexera 对此问题的官方回应是,如果.NET 可执行文件需要更新,那么应该将组件“.NET Installer Class”设置为“否”并创建自己的自定义操作。 Flexera 还承认,如果您将“.NET 安装程序类”设置为“是”,他们不会在任何地方记录您无法创建安装的 MSP 更新。由于基础安装已经发布并且需要针对它创建更新,因此无法返回并更改基础安装。我自己想出了一个解决方法,方法是在 MSP 更新中包含一个自定义操作,该操作会在安装 MSP 期间卸载该服务。这将安装小更新 MSP,但此解决方法不适用于从 ARP 卸载 MSP。

我需要知道在以后的安装中解决此问题的最佳方法。如何安装 .NET 服务,以便日后使用小型更新 MSP 轻松更新服务?

【问题讨论】:

    标签: windows-installer installshield-2009


    【解决方案1】:

    服务应使用MSI方式安装;因为 intaller 类非常脆弱,但自写的自定义操作不太可能好得多(只是更容易控制)。您可以在组件高级设置下找到服务选项。

    【讨论】:

    • 我认为这些选项(“控制 NT 服务”和“安装 NT 服务”)仅适用于 NT 服务。我过去曾成功使用这些选项安装 NT 服务。我正在尝试安装 .NET 服务。这些选项是否适用于 .NET 服务?
    • 有些 .NET 服务无法正常工作(通常当它们的安装程序类设置了不相关的依赖项时),但在这种情况之外它应该可以正常工作。 Phil Wilson 的帖子(community.flexerasoftware.com/showthread.php?t=139667 第二页上的#6)证实了这一点。
    【解决方案2】:

    最好的方法是使用类似于 Windows 更新的 MS BITS(微软的后台智能传输服务)。

    当然,您的主应用程序必须能够使用此服务,因此我不确定此答案是否适用于您的方案,除非您卸载当前应用程序并重新安装具有 BITS 支持的新版本。

    有关 BITS 和在 .NET 中使用它的更多信息

    http://msdn.microsoft.com/en-us/library/aa362708(VS.85).aspx
    http://msdn.microsoft.com/en-us/magazine/cc188766.aspx
    http://www.codeproject.com/KB/IP/sharpBITS.aspx
    

    【讨论】:

      猜你喜欢
      • 2012-02-28
      • 1970-01-01
      • 2010-10-12
      • 2014-02-05
      • 2021-12-18
      • 2018-06-14
      • 1970-01-01
      • 1970-01-01
      • 2011-01-15
      相关资源
      最近更新 更多