3

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

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

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

4

2 回答 2

1

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

于 2010-09-16T14:23:09.720 回答
0

最好的方法是使用类似于 Windows Update 的 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
于 2010-09-15T19:52:48.333 回答