我有一个WiX自定义引导程序,它安装了几个msi包,比如说A、B、C、D和E包。现在我想分发一个新的Bootstrapper,它可以升级软件包A和B,但是不再安装软件包C、D和E。问题是我想把软件包C、D和E留在机器上(如果已经安装了)。
升级时,Bootstrapper将安装/升级包A和B,然后卸载旧的Bootstrapper进行清理。这将卸载软件包C,D和E,因为它们不再是产品的一部分。
问:如何防止C、D和E软件包被卸载?
发布于 2020-04-01 08:06:05
@Shique:如果包(C、D和E)不再包含在Bootstrapper中,您将永远不会在这些包上点击OnPlanPackageBegin,因此不能将状态属性设置为RequestState.None。
这不是对问题的直接回答,而是一种从引导程序中删除软件包的方法,您不再想要分发这些软件包,而不需要卸载软件包。
我们在最初的Bootstrapper中创建了包含包C、D和E的第二个Bootstrapper,现在只包含包A和B,我们将第二个Bootstrapper添加为一个带有永久属性的ExePackage。当运行原始的Bootstrapper时,它将升级包A和B,运行第二个Bootstrapper,这将增加包C、D和E的引用计数。当Bootstrapper进行清理时,它当然会离开包A和B,但也会因为第二个Bootstrapper的引用而离开包C、D和E。
如果包C、D和E没有嵌入(压缩)在第二个引导程序中,请记住将它们作为有效载荷添加到ExePackage中。
以这种方式,我们仍然有一个处理包C,D和E通过应用程序和功能,用户可以选择时间卸载软件包。
https://stackoverflow.com/questions/58412042
复制相似问题