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

.net 使用msi在客户端计算机上安装必备软件的最佳方法,.net,windows-installer,.net,Windows Installer,我有msi,想检查目标机器上是否安装了vsto运行时,我在msi中使用了VS2008的启动条件,但它只将用户重定向到供应商的网站。我只想安装前提条件,如果它没有安装在计算机上,并希望在msi运行期间安装前提条件。 可以概括为: msi运行时: 必须检查是否安装了必备软件如果是,则继续安装 如果没有,则先安装必备软件,然后恢复msi安装 我搜索并找到了许多解决方案,如单包可执行文件、自定义操作中的vb脚本,但要求不随安装程序提供任何内容,也不接受exe:( 我已经安装了orca,但不太了解如何使用

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

msi运行时:

  • 必须检查是否安装了必备软件如果是,则继续安装
  • 如果没有,则先安装必备软件,然后恢复msi安装
  • 我搜索并找到了许多解决方案,如单包可执行文件、自定义操作中的vb脚本,但要求不随安装程序提供任何内容,也不接受exe:(

    我已经安装了orca,但不太了解如何使用orca定制msi

    谢谢你的帮助。。
    提前感谢…

    您可能已经知道,Visual Studio为您生成的setup.exe文件可以安装许多必备软件。但是,您的问题指出,您必须只提供MSI文件,因此setup.exe不会有任何帮助

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


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

    您无法运行多个.msi软件包同时,如果pre-req是基于.msi的,那么它将无法工作。(请记住,许多基于.msi的包都包装在.exes中。)

    是创建Windows安装程序的最强大(也是最免费)的工具之一。我刚才写了一篇端到端的文章,这可能会有所帮助

    例如,您可以通过在WIX文件中定义条件来实施先决条件

    <Condition Message="[ProductName] requires the Microsoft .NET Framework 4 Client Profile">
        Installed Or NETFRAMEWORK40CLIENT
    </Condition>
    
    
    已安装或NETFRAMEWORK40CLIENT
    
    但是,要安装必备软件,您需要一个boostrapper(EXE)

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

    我相信WIX也有一个叫做Burn的工具,它本来打算在3.5版本中发布,我还没有用过,但它也提供了引导功能


    Orca并不是真正用于编译MSI,它只是用于调试和挖掘内部信息。

    因为EXE引导程序是不可接受的,所以只有一种解决方案:

    • 将必备安装程序存储在MSI的表中
    • 创建一些从该表中提取并启动它们的
    • 例如,在“进度”对话框之前,将它们安排在中
    • 用于检测是否安装了必备组件
    • 根据搜索结果调整自定义操作
    基本上,您需要在安装UI期间启动它们。如果在InstallExecuteSequence期间运行自定义操作,则可能无法工作


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

    Thanx用于重播。您是否可以发布链接或详细说明如何使用wix添加先决条件(一步一步)methode因为我对WIX是全新的:(我更新了一个快速的例子。最好的是我提到的文章,它是一个可下载的例子。