windows-installer - 如何在命令行将MSM文件转换为MSI文件?使用 Windows Installer SDK 或 COM 执行此操作

标签 windows-installer merge-module orca

我有一个来自第三方工具的 MSM 文件。 我们使用一个小脚本自定义 MSM,该工具已集成到我们的安装程序中并且运行良好。所有修改均通过 VBscript 使用 COM 和“WindowsInstaller.Installer”完成

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

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

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

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

我搜索并发现的内容:

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

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

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

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

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

MSM 还安装了自己的 UI,这是我们不想要也不需要的。所有控制都是通过我们的软件完成的...因此我们安装了组件,但删除了“开始”文件夹中的菜单项。

最佳答案

任何 MSI Tool可以使用 MSM 文件并从中编译 MSI,以及您想要的任何附加结构 - 也可以想象您对 MSM 所做的更改?

免费开源WiX Toolkit当然可以通过命令行从 MSI 编译 MSI,而且它也是免费且开源的。 WiX Quick Start Suggestions .

但是,您打算在 MSM 中进行的修改值得关注。这确实是一个非常坏的消息,因为 MSM 文件是专门为最终用户无法更改的而设计的。如果您能找到一种替代方法来进行所需的更改,例如您编译的 MSI 文件中的自定义操作,那就太好了。

尽管 WiX 有时需要处理,但合并和 MSM 非常简单:

<DirectoryRef Id="TARGETDIR">
    <Merge Id="VCRedist" SourceFile="MySourceFiles\Microsoft_VC80_CRT_x86.msm" DiskId="1" Language="0"/>
</DirectoryRef>

<Feature Id="VCRedist" Title="Visual C++ 8.0 Runtime" AllowAdvertise="no" Display="hidden" Level="1">
    <MergeRef Id="VCRedist"/>
</Feature>

完整示例在这里:How To: Install the Visual C++ Redistributable with your installer 。和文档:Merge Element .

为什么每次都要合并这个MSM?是否持续更新?如果是这样,供应商是否可以更改它,以便您不需要进行后期处理?如果不更新的话,直接换MSM可以吗?做起来不太好 - 事实上非常糟糕 - 但它可能比不断摆弄其设置更不容易出错。

关于windows-installer - 如何在命令行将MSM文件转换为MSI文件?使用 Windows Installer SDK 或 COM 执行此操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52386592/

相关文章:

.net - 使用InstallUtil并静默设置Windows服务登录用户名/密码

visual-studio-2008 - 如何通过 VS2008 设置和部署向注册表 Run 键添加条目

visual-studio - 需要来自 VS2005 的合并模块

windows - 如何安装 Orca - 哪些 Windows SDK 包含 Orca MSI 编辑工具?

visual-studio-2010 - MSI 创建 : Terminate application before upgrading

windows-installer - EXE 和 MSI 安装程序有什么区别?

vb.net - Installshield自定义对话安装程序

c# - 错误 1001,找不到实际存在的 .manifest c# visual studio 2010

WiX - 在安装时设置合并模块目录?

visual-studio - 没有添加/删除条目的 Visual Studio 安装项目 MSI