繁体   English   中英

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

[英]How to convert an MSM file into an MSI file on the command line? Doing this with the Windows Installer SDK, or COM

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

但是有时我们的支持人员只需要将此工具作为独立的安装程序包即可。

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

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

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

我搜索和发现的内容:

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

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

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

更改的原因很简单。 第三方模块具有“所谓的服务器模式”,通常仅在一台计算机上使用,但是MSM会在每台计算机上启用该模块。 因此wie决定在更改属性时将其禁用。 还有更多变化。

因此,它更多地与主要安装有关。 更新到来时,将永远不会触碰此设置。

另外,MSM会安装自己不需要的UI。 所有控制都是通过我们的软件完成的...因此,我们安装了组件,但删除了Start文件夹中的菜单项。

任何MSI工具都可以使用MSM文件并从中编译MSI ,还可以使用所需的任何其他结构-可以想象您对MSM所做的更改?

免费和开放源代码的WiX Toolkit当然可以通过命令行从MSI编译MSI,它也是免费和开放源代码的。 WiX快速入门建议

但是,您打算在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>

完整示例在这里: 如何:使用安装程序安装Visual C ++ Redistributable 和文档: Merge Element

为什么每次都要合并此MSM? 它会不断更新吗? 如果是这样,供应商可以更改它,以便您不需要后处理它吗? 如果未更新,您是否可以更改MSM本身? 做起来并不好-实际上很糟糕-但与不断修改设置相比,它更容易出错。

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

转换允许您更改MSI / MSM中的“任何内容”(在运行时应用了很少的数据库片段来更改MSI / MSM),设置PUBLIC PROPERTY(始终为大写)可以影响该属性设计的任何影响。 因此,后者是由供应商添加并支持的MSI / MSM的“轻量级”自定义,虽然自定义很好,但根据我的经验很少(通常用于添加许可证密钥或服务器IP或URL或安装) MSI的一部分-一些功能-类似的简单内容)。

可以在下面找到有关如何使用transformsmsiexec.exe命令行来自定义MSI安装的说明:


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


创建转换 :可以使用Orca (MS SDK工具)或任何其他MSI部署工具来创建转换,也可以使用MSI APIWin32,COM,.NET )以编程方式创建转换。

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

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

  • C ++ / Win32和底层的Win32 (不接受替代品-层消失了:-))。


注意 :DTF是作为WiX工具包的一部分安装的。 能够构建MSI文件的开源工具包( 快速入门建议 )。 安装后,在%ProgramFiles (x86)%下的WiX安装文件夹中找到dll。 子文件夹“ bin ”。 在此处进行文件描述 最后,我将简要介绍DTF的实际使用 ,以从MSI文件中获取一些属性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM