【问题标题】:exclude dll in msm from msi从 msi 中排除 msm 中的 dll
【发布时间】:2012-11-27 03:27:37
【问题描述】:

我有一个在 vs2010 中创建的 .MSI 安装程序项目。此 .MSI 包含许多 *.msm(合并模块文件)。有没有办法在安装过程中根据不同的windows平台(例如:xp、win7、vista..)选择特定的*.msm?

例如,如果安装此.MSI 的目标平台是winXP,我的.MSI 将知道选择哪个.msm,而不是在安装过程中选择所有.msm。

顺便说一句,.MSI 有没有办法访问驻留在 .msm 中的特定 *.dll ?同样,例如,如果 .MSI 项目包含一个 .msm 并且此 .msm 包含许多 *.dll,是否有办法在安装此 .MSI 时选择 .msm 中的特定 *.dll ?

我的主要目的是让我的 .MSI 在安装我的 .MSI 期间知道在不同 Windows 平台下使用什么 .dll/.msm。

【问题讨论】:

  • Merge modules 用于将共享代码、文件、资源、注册表项和设置逻辑作为单个复合文件提供给应用程序。特别是有关 Using Configurable Merge Modules 的文档
  • 谢谢马克。 .MSI 在安装过程中选择特定的 *.msm 怎么样?
  • 合并模块在安装之前使用单独的合并工具合并到基础包中。结果是一个包含添加信息的新包。就像下面的答案建议将替代方案合并到一个大包的单独功能中,然后使包能够选择要安装的功能。

标签: visual-studio-2010 windows-installer


【解决方案1】:

您基本上需要将每个合并模块分配给一个新功能并设置该功能的安装条件。我认为这在 VS 2010 中是不可能的,但是有一些 commercial setup authoring tools 可以做到。

【讨论】:

    【解决方案2】:

    合并模块 (.msm) 在结构上类似于简化的 Windows Installer 文件 (.msi)。合并模块不能单独安装,它必须合并到一个 .msi 文件中。最好的选择是获得免费分发的合并工具或购买独立软件供应商提供的合并工具之一。然后您可以使用Mergemod.dll 提供的功能。 合并模块的预期用途是为开发人员提供一种标准方法,以向他们的应用程序提供共享的 Windows Installer 组件和设置逻辑。因此,合并通常由安装包的作者在部署之前完成。在安装应用程序时尝试确定并执行正确的合并似乎不是最好的方法。

    您可以改为为每个目标平台创建一个单独的 .msi。将适当的 .dll 合并到每个包中。然后在您的安装应用程序中包含逻辑以检查用户的系统,然后安装正确的包。

    正如上一个答案所建议的,您可以将所有 .dll 合并到您编写的单个安装包中,这样某些功能和组件的安装取决于Operating System Property Values

    您可以在您的包裹中考虑Using Transitive Components。传递组件的典型用途是在系统升级期间准备要重新安装的产品。安装包的作者将在系统升级期间需要换出的组件指定为具有传递属性。当用户以后升级系统时,必须重新安装产品。重新安装后,安装程序会删除较早的组件并安装较新的组件,而无需安装整个产品。如果您希望您的用户升级他们的系统,这可能会很好地满足您的场景。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多