首页 > 解决方案 > 如何在命令行上将 MSM 文件转换为 MSI 文件?使用 Windows Installer SDK 或 COM 执行此操作

问题描述

我有一个来自第三方工具的 MSM 文件。我们使用一个小脚本自定义 MSM,该工具已集成到我们的安装程序中并且可以正常工作。所有修改都使用 VBscript 使用 COM 和“WindowsInstaller.Installer”完成

但有时我们的支持只需要这个工具作为独立的安装程序包。

有没有一种简单的方法可以在命令行上将 MSM 文件转换为完整的安装程序 MSI 包?

使用带有“WindowsInstaller.Installer”的 VBscript 或 COM 模块是可以的。知道如何转换它,我还会编写一个小的 C++ 程序来执行更改并设置适当的信息和转换。

我需要命令行,将 MSM 转换集成到我们的构建过程中。

我搜索并发现的内容:

我在 SDK 中看到了一些工具,如 ORCA 和其他 MSI 工具,但没有一个能满足我的需要。ORCA 可以将 MSM 保存为 MSI 文件,但我在命令行上看不到执行此操作的选项。

注意:我找到了一个旧工具 msm2msi,但它不适用于我的 MSM 文件并崩溃,并且没有可用的源。

编辑关于我们应用的更改:

改变的原因很简单。第三方模块有一个“所谓的服务器模式”,通常它只在一台机器上使用,但 MSM 为每台机器启用它。因此,wie 决定在更改属性时禁用它。还有一些变化。

所以更多的是关于主要安装。当更新到来时,这个设置永远不会被触及。

MSM 还安装了自己的 UI,这是我们不想要和不需要的。所有控制都是通过我们的软件完成的……所以我们安装了组件,但我们删除了 Start 文件夹中的菜单条目。

标签: windows-installermerge-moduleorca

解决方案


Transforms & msiexec.exe:根据您更新的信息,我想说您可以通过使用转换来解决所有这些问题,甚至可能通过安装命令行设置属性。

转换允许您更改 MSI / MSM 中的“任何内容”(它们是在运行时应用以更改 MSI / MSM 的小数据库片段),设置公共属性(始终大写)允许您影响该属性旨在影响的任何内容。所以后者是供应商添加和支持的 MSI / MSM 的“轻量级”定制,在可用时很好,但根据我的经验,很少足够(典型用途是添加许可证密钥或服务器 IP 或 URL 或安装只有 MSI 的一部分 - 一些功能 - 像这样的简单东西)。

可以在此处找到有关如何使用transforms或自定义MSImsiexec.exe安装的命令行的说明:


GUI:当 MSM“安装在自己的 GUI 中”时,我真的不明白你指的是什么?希望这只是从开始菜单启动可执行文件的快捷方式?如果是这样,您可以使用转换轻松删除它。


创建转换:您可以使用Orca(MS SDK 工具)或任何其他MSI 部署工具创建转换,或者您可以使用MSI API Win32、COM、.NET )以编程方式创建它。

  • COM 自动化Microsoft MSI SDK包含一个名为WiGenXfm.vbs的VBScript。如果您安装了 Visual Studio,您将安装它。您也可以在github.com上找到它(但请确保从您自己的磁盘中获取)。

  • DTF / .NET是 WiX 的一个组件,它允许您通过托管代码访问 MSI API。互操作已为您完成。样品在这里

  • C++ / Win32 :和全面的 Win32 (不接受任何替代品 - 层消失:-))。


注意:DTF 是作为WiX 工具包的一部分安装的。能够构建 MSI 文件的开源工具包(快速入门建议)。安装完成后,在 WiX 安装文件夹下找到 dll %ProgramFiles (x86)%。子文件夹“ bin ”。文件说明在这里。最后,我将以一个 DTF 的快速示例结束,从 MSI 文件中获取一些属性。


推荐阅读