【问题标题】:Replace a file from MSI从 MSI 替换文件
【发布时间】:2017-04-20 20:21:39
【问题描述】:

我打算替换 MSI 文件中的 DLL 文件。有什么方法可以在不影响 MSI 安装的情况下做到这一点

【问题讨论】:

    标签: replace windows-installer edit


    【解决方案1】:

    首先,除了直接修改 MSI 之外,您可能还想查看其他替代方法。这很少是一个好方法,但你可能有你的理由。如需其他选项,请查看MSDN on patches

    但如果您要直接修改它,请查看此blog entry。它解释了如何使用 Orca、InstEdit、MSIdb 和 IExpress 提取 CAB、解压缩 CAB、替换文件、重新压缩并将 CAB 文件附加回 MSI。

    【讨论】:

      【解决方案2】:

      InstEdit (http://www.instedit.com/) 确实有效,但它不是一个直观的工具。您不必拥有加号版本,这是基本的作品。 刚刚使用完毕。这是过程。
      1.获取旧的MSI并安装它以获得所有安装的原始目标。

      1. 将所有安装目标复制到当前 MSI 的工作目录。

      2. 打开 InstEdit 并打开 MSI(或将 MSI 拖放到 InstEdit 界面中)

      3. 打开表格选项卡(见图)

      4. 点击媒体项,您会在右侧看到一些信息

      5. 在右侧窗口中单击鼠标右键并选择 Rebuild Selected CABs。

      如果您在找到所有 MSI 项目的目录中替换旧项目,那么当您单击重建选定的 CAB 时,它将自动导入该项目的较新版本并重建您的 CAB。

      错误是神秘的,但如果你仔细阅读它们,你可以弄明白它确实有效。我用新构建的版本替换了 MSI 中的 EXE。

      编辑

      已经快 1 年了,我回来提醒自己 InstEd 工具的工作原理。但是,我还偶然发现了一个您也可能遇到的错误,因此我想添加其他信息。

      当您尝试 [重建选定的 CAB] 时,您可能会收到如下所示的错误:

      这是一个有点神秘的错误。 InstEd 试图告诉您,您需要在您尝试重建 CAB 的位置创建的 CommonFilesFolder。然后将 Main.exe 放在该文件夹中。它还在同一个文件夹中寻找 Main.ico。

      您需要做的就是将目标 .exe 和 .ico(或任何提到的文件)复制到 CommonFilesFolder 并再次运行重建,它就会工作。

      【讨论】:

      • 因为 InstEd 界面非常不直观,所以我在几周前写了上面的答案并忘记了它。今天我不得不编辑另一个 MSI(我们现在拥有许可版本),我回到这里来记住如何使用该软件。 ;)
      • 出于某种原因,这对我不起作用。我收到另一个错误 - “MakeCab 失败”。
      • @PASAf 我知道这已经很晚了,但是您的问题可能是由于另一个原因,这个原因可能是因为您需要包含在 MSI 中指向的位置的原始文件由 InstEd 项目提供,以便在重建时将所有这些文件拉入。这非常棘手。
      • InstEd 界面太混乱了,我不得不回来提醒自己如何重新构建 MSI。这太令人困惑了,您必须转到侧面的那个媒体项目,然后右键单击右侧的项目,然后您才能重建它。为什么没有显示 Rebuild MSI 的菜单选项?没有把握。但这是一个奇怪的用户体验。
      • 只是想补充一点,您需要保存 .msi 才能显示您的更改。我以为在制作更新的 .cab 后丢失了一个输出文件,哈哈。也感谢您的编辑!
      【解决方案3】:

      http://apps.instedit.com/ 尝试 InstEdit,但我不确定是否可以替换 msi 包中的文件。您也可以看看 Windows SDK 附带的 Microsoft Orca msi 编辑器。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-25
        • 1970-01-01
        • 2011-12-30
        • 1970-01-01
        相关资源
        最近更新 更多