在BizTalk中为什么导入和安装MSI文件?

时间:2011-02-05 00:29:07

标签: biztalk biztalk-2009

我正在开发一个BizTalk项目,并且不了解安装(双击)和导入(使用biztalk管理控制台)的原因。

我有一个BizTalk项目,我添加了绑定到它的资源并导出了一个msi文件。现在我想在另一台服务器上安装该应用程序。

据我所知,这是MSI安装的作用:

  1. 将文件复制到文件系统
  2. 将程序集注册到GAC
  3. 将应用程序添加到“添加/删除程序”小程序
  4. 但是,这是我的问题:

    1. 使用msi进行安装不会将应用程序添加到Biztalk管理控制台。我们需要导入msi。
    2. 使用msi卸载不会从GAC中删除程序集。它只删除它复制到文件系统的文件。是否还要卸载以删除GAC程序集?
    3. 如果我只是导入MSI,我可以启动我的biztalk应用程序,它似乎运行正常。结合问题#1和#2,为什么MSI需要?我可以看到只是导入不会将其添加到GAC,因此如果其他应用程序依赖它,它们将无法工作。
    4. 我确定我缺少msi提供的功能/配置,但有人可以帮助我理解为什么msi需要安装并导入到biztalk中以及为什么当你uninistall它没有完全卸载它安装的所有东西?

2 个答案:

答案 0 :(得分:12)

部署BizTalk解决方案时需要执行两项操作。

为什么部署BizTalk解决方案需要两步操作?

  1. 将BizTalk解决方案注册到BizTalk管理数据库
  2. 将BizTalk Artefacts和依赖项安装到文件系统
  3. 首先,构成解决方案的BizTalk程序集必须注册到BizTalk管理数据库。这将允许BizTalk知道可用的Schema,Maps,Pipelines和Orchestration。

    这是通过将Windows Installer程序包导入BizTalk来完成的。

    请记住,典型的BizTalk平台通常由许多物理服务器组成。但是,BizTalk Group中的所有服务器共享一个BizTalk管理数据库。

    因此, 整个BizTalk组需要执行一次导入操作

    其次,已注册到BizTalk的BizTalk程序集需要实际存在某处。因此,必须将它们安装到文件系统中。

    双击Windows Installer程序包即可完成此操作。

    请注意, 安装操作需要在作为BizTalk组一部分的任何物理服务器 上重复。而且,因为BizTalk管理数据库中只有一个定义是解决方案的一部分,这就解释了为什么必须将BizTalk程序集安装到全局程序集缓存(GAC)。

    请注意,到目前为止,规则很简单:

    • 必须在BizTalk组中的每台服务器上的GAC中安装BizTalk程序集
    • 必须在BizTalk管理数据库中导入(或注册)一次BizTalk程序集

    但是,我们只处理了BizTalk程序集。 BizTalk解决方案在运行时需要的所有其他程序集或其他依赖项(业务规则定义,COM对象,绑定,配置文件等)不在此两步操作中。

    环境间部署

    但是,当解决方案运行时,这些依赖项也必须适当地存在于每个BizTalk服务器上。

    这就是为什么大多数这些文物也注册到BizTalk管理数据库。但这一次,只有在创建BizTalk解决方案的Windows Installer程序包时才会引入依赖项,以便可以在目标服务器上正确安装这些依赖项。

    为什么在卸载时不会从GAC中删除BizTalk程序集?

    作为一般经验法则,assemblies that are registered to the Global Assembly Cache are considered shared resources。因此,出于安全原因,卸载时不会从GAC中删除BizTalk程序集。考虑当多个应用程序使用自定义BizTalk管道时会发生什么。在这种情况下,BizTalk管道必须是单独的,通用的BizTalk应用程序的一部分。卸载此共享BizTalk应用程序将破坏依赖此管道的所有其他应用程序...

    adding resources to the BizTalk Management Database时,您可以选择在导入安装时将程序集安装到GAC。我强烈建议不要使用“GacOnImport”功能,在大多数典型的多服务器BizTalk组中没有意义。

    但是,对于Windows Installer程序包,有一种更简单,最灵活的方法来自定义可以对BizTalk程序集或其他依赖项执行的操作。这是通过Pre Processing and Post Processing Scripts完成的。

    这些脚本允许在导入/安装操作期间的四个特定时间运行任意应用程序。

    • 导入前
    • 导入后
    • 安装前
    • Intalling
    • 之后

    如果您希望在卸载时从GAC中删除程序集,则可以在操作的“安装前”阶段安排相应的命令行。

答案 1 :(得分:9)

导入MSI文件会将MSI中的程序集添加到BizTalk数据库中。如您所述,运行MSI会将程序集添加到GAC。两者都需要“安装”BizTalk应用程序。只有BizTalk程序集必须导入到BizTalk管理数据库中。 BizTalk使用的所有DLL都必须在GAC中。

可能值得一看http://msdn.microsoft.com/en-us/library/aa578463(v=BTS.10).aspx,看看您可以自定义BizTalk应用程序中每个资源的安装和导入行为。这将允许您只导入MSI,并将程序集添加到数据库并将它们安装到GAC中,这样您的添加/删除程序就不会有任何混乱。

为什么在卸载已安装的MSI时不会从GAC中删除DLL,我可以告诉您这是设计的。如果您在MSDN http://msdn.microsoft.com/en-us/library/aa562001(v=bts.10).aspx上查看此页面,您会发现此行为已按预期进行描述。该MSDN文章还包括如何从GAC中删除程序集的链接,其中说明了如何使用后处理脚本让MSI在卸载MSI时实际从GAC中删除程序集。