使用msi在客户端计算机上安装必备软件的最佳方法

时间:2011-09-09 16:07:12

标签: .net windows-installer

我有msi并想检查目标机器上是否安装了vsto运行时,我在我的msi中通过VS2008使用了启动条件,但它只将用户重定向到供应商的网站。我只想安装先决条件,如果它没有安装在机器上,并希望在msi运行期间安装先决条件。 它可以概括为:

当msi正在运行时:

  1. 如果是,则必须检查是否已安装先决条件,然后重新开始安装
  2. 如果没有,请先安装先决条件,然后重新启动msi安装
  3. 我搜索并找到许多解决方案,如单个包可执行文件,自定义操作中的vb脚本,但要求不是使用安装程序发送任何内容,而且exe是可接受的:(

    我安装了orca,但没有太多知识使用Orca自定义msi

    感谢您的帮助.. 提前谢谢......

4 个答案:

答案 0 :(得分:3)

您无法同时运行多个.msi程序包,因此如果pre-req是基于.msi的,它将无法运行。 (请记住,许多基于.msi的包都包含在.exes中。)

答案 1 :(得分:3)

WIX是用于创建Windows安装程序的最强大(免费)工具之一。我前段时间在Creating a localized Windows Installer & bootstrapper写了一篇端到端的文章,可能有所帮助。

例如,您可以通过在WIX文件中定义条件来强制执行先决条件。

<Condition Message="[ProductName] requires the Microsoft .NET Framework 4 Client Profile">
    Installed Or NETFRAMEWORK40CLIENT
</Condition>

但是要安装先决条件,您需要一个boostrapper(EXE)。

上面的文章展示了如何使用dotNetInstaller创建托管EXE,在最终执行嵌入式MSI之前检查并安装这些先决条件。当然,您也可以将一大堆MSI链接在一起,它非常灵活。

我相信WIX还有一个名为Burn的工具,它原本打算在3.5版本中发布,我没有使用它,但它也提供了引导功能。

Orca并不真正用于编译MSI,它只对调试和挖掘内部非常有用。

答案 2 :(得分:2)

由于不接受EXE引导程序,因此只有一个解决方案:

  • 将先决条件安装程序存储在MSI的Binary表中
  • 创建一些custom actions,从该表中提取它们并启动它们
  • InstallUISequence中安排他们,例如在进度对话框
  • 之前
  • 使用searches检测是否已安装先决条件
  • 使用搜索结果调整自定义操作

基本上,您需要在安装UI期间启动它们。如果自定义操作在InstallExecuteSequence期间运行,则可能无效。

Visual Studio不支持此功能,但某些商业设置创作工具可直接支持它。如果您需要免费解决方案,可以使用WiX,但您需要自己编写自定义操作。

答案 3 :(得分:1)

您可能已经知道,Visual Studio为您生成的setup.exe文件可以安装许多先决条件。但是,您的问题表明您必须只发送一个MSI文件,因此setup.exe无法提供帮助。

相反,您可以创建自己的程序来安装先决条件。在安装中包含该程序,以便它将捆绑到MSI中,然后设置自定义操作以在安装时运行它。您甚至可以在安装程序中设置一个标志,以便程序实际上不会安装在目标计算机上 - 而是将它捆绑到MSI中并提供给安装程序。

如果您已经安装了基于.NET的代码,则解决方案更加容易:将项目安装程序类添加到现有代码中,然后设置自定义操作以运行安装程序类。但请注意,如果您要安装的先决条件是.NET运行时本身,则此方法将不起作用。