必要なのは、マージモジュール(.msm)からディスクにファイルを抽出できるコマンドラインツールだけです。言い換えると、MSIで可能なのと同じ「管理インストール」機能が必要です。
msiexec / a myProduct.msi TARGETDIR = "C:\ myInstallation" / qn
上記はmsiでのみ機能します(私が知る限り)。したがって、マージモジュールで同じ効果を得るには、msidb.exeとorca.exeを試しています。orcaのドキュメントには次のように記載されています。
多くのマージモジュールオプションは、コマンドラインから指定できます。
マージモジュールからのファイルの抽出
Orcaは、マージモジュールに含まれるファイルを抽出するための3つの異なる方法をサポートしています。Orcaは、個々のCABファイルを抽出し、ファイルをモジュールツリーに抽出し、ターゲットデータベースにマージされた後、ファイルをソースイメージに抽出できます...
ファイルの抽出
マージモジュールから個々のファイルを抽出するには、
... -x ...コマンドラインのオプション。ここで、は新しいディレクトリツリーへの目的のパスです。
指定されたパスは、抽出されたファイルのルートパスとして使用されます。すべてのファイルは、モジュールに埋め込まれたCABファイルから抽出され、指定されたパスに配置されます。抽出されたファイルのディレクトリレイアウトは、マージモジュールのディレクトリツリーに基づいています。
それは私が必要なもののように聞こえます。しかし、私が試してみると、orcaは(指定したmsmに関する情報を含む)エディターを開くだけで、何もしません。私はさまざまなコマンドラインを試しましたが、通常は次のようになります。
orca -x theDirectory theModule.msm
空のフォルダとして「theDirectory」を使用します。私が言ったように-それは何もしませんでした。
次に、msidbを試しました。ここで、いくつかの試行は次のようになります。
msidb -d theModule.msm-w{ストレージ}
msidb -d theModule.msm -x MergeModule.CABinet
最初のケースでは、{storage}に何を入れるべきかわかりません。2番目のケースでは、リテラル文字列「MergeModule.CABinet」が必要であることがわかります(これは予約済みの名前です)。ただし、抽出されたキャビネットは、ファイル階層または「通常の」ファイル名を保持しません。だから私は自分の目的のためにそれを使うことができません。
誰かが私がコマンドラインオプションで間違っていることを説明できますか?これを行うことができる他のツールはありますか?