windows-installer - 如何在命令行上将 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 文件夹中的菜单条目。
解决方案
Transforms & msiexec.exe:根据您更新的信息,我想说您可以通过使用转换来解决所有这些问题,甚至可能通过安装命令行设置属性。
转换允许您更改 MSI / MSM 中的“任何内容”(它们是在运行时应用以更改 MSI / MSM 的小数据库片段),设置公共属性(始终大写)允许您影响该属性旨在影响的任何内容。所以后者是供应商添加和支持的 MSI / MSM 的“轻量级”定制,在可用时很好,但根据我的经验,很少足够(典型用途是添加许可证密钥或服务器 IP 或 URL 或安装只有 MSI 的一部分 - 一些功能 - 像这样的简单东西)。
可以在此处找到有关如何使用transforms
或自定义MSImsiexec.exe
安装的命令行的说明:
- 如何更好地利用 MSI 文件(详解)
- 如何使用调整后的设置在 /silent 模式下运行安装(简短形式- 部分“ MSI - 自定义标准包”)
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 文件中获取一些属性。
推荐阅读
- kubernetes - Kustomize metadata.name 为特定种类:
- tensorflow - 如何从 Google AutoML 导出模型
- typescript - 如何在打字稿的 webpack 中使用 seznam mapy?
- javascript - 如何使用 React spring 为输入字段设置动画
- c# - EF Core 获取高于一列但低于另一列的实体
- html - 使用 CSS 将标题标题向右移动
- android-studio - Ubuntu 上的 Android Studio 无法打开
- javascript - 检查本地存储时,暗模式复选框卡住
- playframework - 如何防止 Twirl 从 HTMLentities 对脚本中的字符串进行编码?
- excel - 从不同工作簿运行宏时的不同范围结果