2012-04-07 101 views
8

我正在使用WiX使MSI安装程序调用另一个MSI安装程序。MSI安装程序使用WiX以静默模式调用另一个MSI安装程序

  • 我可以在UILevel = 5(完整用户界面)模式下解决这种情况。我的解决方案是将一个CustomAction添加到调用另一个MSI的UISequence表中。它不会得到错误代码1500:“另一个安装已经在进行中......”
  • 但是在slient模式下,UILevel = 2,我不能这样做,因为它只在ExecuteSequence中运行CustomAction。 如何以静默模式运行我的MSI并调用另一个MSI安装程序?

回答

1

严格来说,MSI文件是交易安装程序,所以它们一次只能出现一个。

微软用合并模块来解决这个问题,这些模块和MSI一样,但是用于嵌入MSI文件。

想要嵌入MSI的任何机会都可以更改为MSM文件?

+0

我以为这个解决方案。这意味着儿童微星嵌入父MSI的数据库。但是我不能使用这个解决方案,因为我的子MSI可以在编译时间后更改,父MSI只能通过CustomAction调用它。 – Klaus 2012-04-07 07:30:14

-1

您可以尝试使用延迟异步自定义操作启动第二个MSI,无需在InstallFinalize标准操作之后返回代码检查。这样,自定义操作将在第一个安装完成时启动。

+1

如果我们安排此操作,则会发生错误。错误2762:无法安排操作。该操作必须安排在InstallInitialize和InstallFinalize之间。 – Klaus 2012-04-07 15:33:03

+0

我忘了延迟的自定义操作无法安排在InstallFinalize后。但是,您可以在InstallExecute之后立即尝试。 – 2012-04-07 17:38:01

7

将两个MSI都安装在wix 3.6中包含的Burn bootstrapper中。

+1

我明白“Burn bootstrapper”会解决先决条件(NET 35,Java ...)问题。它适合与“Msi通过自定义操作调用另一个msi”问题?无论如何,这只是我现在的方式。希望它可以做到!谢谢先生! – Klaus 2012-04-08 05:16:08

+0

@klaus:从我在上面的回答中给出的链接:“捆绑还允许将非常大的应用程序或应用程序套件分解为更小的逻辑安装包,同时仍向最终用户呈现单个产品。” – 2012-04-08 06:04:21