【问题标题】:How to piggyback an MSI installer within an MSI installer如何在 MSI 安装程序中搭载 MSI 安装程序
【发布时间】:2012-05-22 18:55:14
【问题描述】:

这是我第一次尝试使用 Windows Installer 构建安装程序包(我们的客户不希望使用我已广泛使用的 Wix)。目前,我有一个可以按预期构建和工作的 MSI。但是,我需要为我编写的程序在其他机器上工作所需的 SDK 添加安装程序。我已将第二个安装程序(也是 MSI)添加为自定义操作,该操作根据您在安装过程中是否勾选复选框来执行。问题是,当第二个安装程序执行时,我收到错误提示系统上已经有一个安装程序正在运行并且安装无法继续。我怎样才能解决这个问题?自定义操作设置为在安装期间运行。

提前感谢您为解决此问题提供的任何帮助。

【问题讨论】:

  • 您使用什么工具来创作 MSI?这将有助于给你一个具体的答案。
  • 我正在使用安装项目在 VS2010 中构建它(对不起,这就是我说 Windows Installer 时的意思)。
  • 看看我在 Codeplex 'ISWIX' 上的 FOSS proct。您可以使用它来创作 wxs 合并模块(文件和文件夹设计器),然后在 wxs 产品中使用该模块。这允许客户拖放更改,但仍然必须学习 wix 才能进行其他更改。基本上 90% 的覆盖率。

标签: windows-installer


【解决方案1】:

您不能同时安装两个 MSI 软件包,更具体地说,您不能在另一个 MSI 的 InstallExecuteSequence 期间启动另一个 MSI。但是,如果您在 UI 序列中触发自定义操作,这是可能的。

【讨论】:

  • 在UI序列中触发是什么意思?我尝试在安装阶段和提交阶段运行自定义操作。我仅有的另外两个选项是回滚和卸载
  • 这是个坏主意。首先,假设您的工具可以创作它不能创作的东西,您将限制对静默安装的支持,因为在 /QN 或 /QB 期间不处理 UI 序列。它是在 /QR 期间处理的,但这是一个完整的 hack。您必须对输出 MSI 进行大量后期构建操作,以注入安装项目不支持的您需要的创作。
【解决方案2】:

设置项目因其提供的创作限制和质量而臭名昭著。以至于 MSFT 已经从 Visual Studio 11 中删除了它们,并用 InstallShield Limited Edition 替换了它们。

最好的办法是查看安装项目使用的 setup.exe 引导程序。查看驱动它们的 XML 格式,并使您的 SDK 安装程序成为一个简单的静默安装程序,可以在调用您现在正在处理的主 MSI 之前由该基础结构驱动。

InstallShield(Setup Prereqs 和 Suite Installers)和 WiX(Burn)对于这种情况来说都是更强大的工具。

【讨论】:

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