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

在BizTalk中,为什么同时导入和安装MSI文件?,biztalk,biztalk-2009,Biztalk,Biztalk 2009,我正在处理BizTalk项目,不明白需要安装(双击)和导入(使用BizTalk管理控制台)的原因 我有一个BizTalk项目,我向其资源添加了绑定,并导出了一个msi文件。现在我想在另一台服务器上安装该应用程序 据我所知,MSI安装就是这样做的: 将文件复制到文件系统 将程序集注册到GAC中 将应用程序添加到“添加/删除程序”小程序 然而,以下是我的问题: 使用msi安装不会将应用程序添加到Biztalk管理控制台。我们需要导入msi 使用msi卸载不会从GAC中删除程序集。它只删除复制到文件系

我正在处理BizTalk项目,不明白需要安装(双击)和导入(使用BizTalk管理控制台)的原因

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

据我所知,MSI安装就是这样做的:

  • 将文件复制到文件系统
  • 将程序集注册到GAC中
  • 将应用程序添加到“添加/删除程序”小程序
  • 然而,以下是我的问题:

  • 使用msi安装不会将应用程序添加到Biztalk管理控制台。我们需要导入msi
  • 使用msi卸载不会从GAC中删除程序集。它只删除复制到文件系统的文件。卸载是否也需要删除GAC程序集
  • 如果我只导入MSI,我就可以启动biztalk应用程序,并且它似乎运行良好。结合问题1和问题2,为什么需要MSI?我可以看到,只是导入并没有将其添加到GAC中,因此如果其他应用程序依赖于它,它们将无法工作

  • 我确信我缺少msi提供的功能/配置,但有人能帮助我理解为什么msi需要安装并导入biztalk,以及为什么取消安装时它不能完全卸载它安装的所有内容?

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

    值得一看的是,您可以自定义BizTalk应用程序中每个资源的安装和导入行为。这将允许您只导入MSI,并让MSI将程序集添加到数据库中,并将它们安装到GAC中,这样您的添加/删除程序中就不会出现额外的混乱


    至于为什么卸载已安装的MSI时没有从GAC中删除DLL,我可以告诉你这是出于设计。如果您查看MSDN上的此页面,可以看到此行为的描述与预期一致。该MSDN文章还包括如何从GAC中删除程序集下的链接,该链接解释了如何使用后处理脚本让MSI在卸载MSI时从GAC中实际删除程序集。

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

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

  • 将BizTalk解决方案注册到BizTalk管理数据库
  • 将BizTalk人工制品和依赖项安装到文件系统
  • 首先,组成解决方案的BizTalk程序集必须注册到BizTalk管理数据库。这将允许BizTalk了解可用的架构、映射、管道和业务流程

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

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

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

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

    这是通过双击Windows Installer软件包来完成的

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

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

    • BizTalk程序集必须安装在BizTalk组中每台服务器的GAC中
    • BizTalk程序集必须在BizTalk管理数据库中导入(或注册)一次
    但是,我们只处理了BizTalk程序集。此两步操作不包括BizTalk解决方案在运行时需要的所有其他程序集或其他依赖项(业务规则定义、COM对象、绑定、配置文件等)

    环境间部署

    但是,当解决方案运行时,这些依赖关系也必须在每个BizTalk server上出现(视情况而定)

    这就是为什么这些人工制品中的大多数也会注册到BizTalk管理数据库。但这一次,这样做只是为了在创建BizTalk解决方案的Windows Installer软件包时引入依赖项,并且可以在目标服务器上适当地安装这些依赖项

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

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

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

    但是,有一种更简单、最灵活的方法可以自定义可以对BizTalk程序集或其他de执行的操作