【问题标题】:Install another package in MSI Installer在 MSI Installer 中安装另一个软件包
【发布时间】:2015-01-15 13:26:57
【问题描述】:

我使用 MSI 安装程序来设置我的项目。该项目是一个 PowerPoint 插件。 要运行我的项目,我需要安装第三方包(exe 文件)。据我调查,此软件包安装在我的计算机上:

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

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

1) 将上述所有包的dll文件包含到我的项目中,并照常创建MSI安装程序。

我总是收到类似的错误:“检索带有 CLSLD {38...} 的组件的 COM 类工厂失败,原因是以下错误 80...找不到特定模块。来自 HRESULT 的异常: 0X80..."

2) 在 MSI Setup 中创建自定义操作,并在安装我们的项目之前尝试安装包。

而在卸载项目的时候,我们需要先卸载包。

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

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

【问题讨论】:

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


    【解决方案1】:

    您查看过Wix Toolset 吗?具体来说,Wix Bootstrapper。引导程序允许您构建一个安装程序,该安装程序可以先将其他 MSI 安装为软件包,然后再安装您的。我们将它用于许多项目并且效果很好。

    【讨论】:

    • 使用 MSI 安装程序,我可以在不使用引导程序的情况下获得相同的结果。但是,我想知道为什么第一个解决方案不能解决问题。总是,得到如上的错误
    • 第一个解决方案不起作用,除非您还注册了加载项。简单地复制 DLL 是行不通的,它还有更多功能,这就是为什么引导程序可能是一个更好的主意——它允许您在运行之前运行其他 MSI。
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-21
      • 2011-08-11
      • 1970-01-01
      • 2023-03-24
      相关资源
      最近更新 更多