在MSI安装程序中安装另一个程序包

时间:2015-01-15 13:26:58

标签: c# visual-studio-2013 windows-installer

我使用MSI Installer进行项目设置。该项目是PowerPoint AddIn。 要运行我的项目,我需要安装第三方软件包(一个exe文件)。据我调查,这个软件包安装在我的电脑上:

  • 用户应用程序文件夹中的dll文件
  • C:\ WINDOWS \ assembly \ GAC_MSIL \
  • 中的一些dll文件

回到我的MSI安装程序。有两种解决方案:

1)将上面的所有包的dll文件包含到我的项目中,并正常创建MSI设置。

我总是遇到如下错误:"由于以下错误80,检索具有CLSLD {38 ...}的组件的COM类工厂失败...找不到特定模块。 HRESULT的例外情况:0X80 ......"

2)在MSI安装程序中创建自定义操作,并尝试在安装项目之前安装软件包。

卸载项目时,我们需要先卸载软件包。

还有其他解决方案吗?或任何建议? 感谢

注意:我使用的是PowerPoint 2010,2013,VS Ultimate 2013,VSTO,C#

2 个答案:

答案 0 :(得分:1)

你有没有看过Wix Toolset?具体而言,Wix Bootstrapper。引导程序允许您在安装之前构建可以先安装其他MSI作为程序包的安装。我们在许多项目中使用它并且效果很好。

答案 1 :(得分:1)

第一个问题“检索COM类工厂......”只是表明您没有正确注册,并且因为您没有说您尝试过的COM注册(如果有的话),所以不可能诊断它。

您无法创建其他自定义MSI设置,并将其作为自定义操作从您的设置中安装。首先,它不起作用,因为你不能有递归的MSI设置,这也适用于卸载,所以你不能让你的安装调用自定义操作卸载另一个产品。

您最好的选择是为加载项创建合并模块并将其包含在您的产品中。要问的问题是加载项是否是一个单独的产品,可能作为独立产品提供。如果是,则将其设为MSI并使用WiX Burn / Bundle方法。如果没有,那么使其成为可以包含在任何MSI中的合并模块。无论哪种方式,如果Dll进入MSI或MSM,您需要找出COM注册。