从合并模块中提取文件

Bre*_*ias 8 installer windows-installer extract orca merge-module

我想要的只是一个命令行工具,可以将文件从合并模块(.msm)提取到磁盘上.换句话说,我希望MSI可以使用相同的"管理安装"功能:

msiexec/a myProduct.msi TARGETDIR ="C:\ myInstallation"/ qn

以上只适用于msi(我可以告诉).因此,为了获得合并模块的相同效果,我正在尝试msidb.exe和orca.exe orca的文档说明:

可以从命令行指定许多合并模块选项...

从合并模块中提取文件

Orca支持三种不同的方法来提取合并模块中包含的文件.Orca可以提取单个CAB文件,将文件解压缩到模块树中,并在将文件合并到目标数据库后将其提取到源图像中...

提取文件

要从合并模块中提取单个文件,请使用

命令行上的... -x ...选项,其中是新目录树的所需路径.

指定的路径用作提取文件的根路径.所有文件都从嵌入在模块中的CAB文件中提取出来并放在指定的路径中.提取文件的目录布局基于合并模块的目录树.

这听起来像我需要的.但是当我尝试它时,orca只是打开一个编辑器(在我指定的msm上有信息)然后什么都不做.我尝试了各种命令行,通常从这开始:

orca -x theDirectory theModule.msm

我使用"theDirectory"作为我想要的任何空文件夹.就像我说的 - 它没有做任何事情.

然后我尝试了msidb,我做过的几次尝试看起来像这样:

msidb -d theModule.msm -w {storage}

msidb -d theModule.msm -x MergeModule.CABinet

在第一种情况下,我不知道要为{storage}放什么.在第二种情况下,事实证明文字字符串"MergeModule.CABinet"是必要的(它是保留名称).但是,提取的机柜不保留文件层次结构或"正常"文件名; 所以我不能用它来达到我的目的.

有人可以用命令行选项解释我做错了什么吗?有没有其他工具可以做到这一点?

Bry*_*anJ 9

您可以使用WiX附带的反编译工具(称为Dark)来反编译合并模块并提取文件:

dark.exe myMergeModule.msm -x "path_to_extracted_files"
Run Code Online (Sandbox Code Playgroud)

这些文件将被引入-x参数中指定的路径.

注意:将使用安装数据库的File表中指定的名称来提取文件,这些名称实际上可能不是实际安装文件时使用的文件名.如果您需要使用实际文件名提取文件,请参阅我对此问题的其他答案:从合并模块中提取文件

  • 对于黑暗版本 3.5,该语法似乎不正确?我让这个例子工作:dark.exe -xc:\msm\extracted c:\msm\myMergeModule.msm “-x”后面的参数是提取到的路径(暗版本 3.5)。 (2认同)

Bry*_*anJ 5

我只需要创建一个空白的 msi,然后使用 Orca 尝试将模块合并到我的 msi 中,然后提取文件。

  1. 创建一个空白的 .msi。我使用WiX 3.6创建 .msi 和以下是最小的源。我将其命名为“blank.msi”。

    <?xml version="1.0" encoding="UTF-8"?>
    <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
        <Product Id="*" Name="blank" Language="1033" Version="1.0.0.0" Manufacturer="blank" UpgradeCode="298878d0-5e7b-4b2e-84f9-45bb66541b10">
            <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />
    
            <MediaTemplate />
    
            <Directory Id="TARGETDIR" Name="SourceDir">
                <Directory Id="ProgramFilesFolder"/>
            </Directory>
    
            <ComponentGroup Id="ProductComponents" Directory="ProgramFilesFolder" />
    
            <Feature Id="ProductFeature" Title="blank" Level="1">
                <ComponentGroupRef Id="ProductComponents" />
            </Feature>
         </Product>
    </Wix>
    
    Run Code Online (Sandbox Code Playgroud)
  2. 使用Orca从合并模块中提取文件。

    orca -m "myModule.msm" -f ProductFeature -x .\xdir blank.msi
    
    Run Code Online (Sandbox Code Playgroud)

文件将被提取到 -x 参数指定的目录(在本例中为.\xdir)。

请注意,-f 参数“ ProductFeature ”的值与上面 msi 文件中指定的功能名称匹配。