从msi中以msm排除dll

时间:2012-11-19 08:55:03

标签: visual-studio-2010 windows-installer

我在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。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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

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

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