Windowsインストーラパッケージ(.MSI)は、OLE/COM構造化ストレージです。Microsoftは、Win32 API(MSI.dll)とCOM自動化インターフェイス(「WindowsInstaller.Installer」)を提供しています。
Unixでは、Win32APIの多くがWineに移植されています。
今までこれをやったことはありませんが、有望なものがあります。OpenMCDFと呼ばれるオープンソースプロジェクトがあります。Visual Studio / .NETで書かれていますが、Monoをサポートしていると主張しています。その中にはテストアプリ(ドキュメントエクスプローラー)があり、ファイル| 開くと、ドロップダウンの選択肢として.MSIが表示されるため、少なくともそれについて考えていました。
とにかくソースコードには、ストリームとストレージのクラスがあります。MSIの準備を整えると、ファイルが(Microsoft)CABアーカイブに圧縮され、ストリームに挿入することでMSIに埋め込まれていることがわかります。
このような状況では、更新されたXMLファイルを使用して新しいキャビネットを作成し、それをMediaテーブルに記録し、新しいシーケンス番号、ファイルサイズ、およびメディアIDを反映するようにファイルテーブルを更新します。
MSIの専門家にとって、これはC#で行うのは簡単です。.NETの専門家にとって、それは本当に難しいことです。CentOS上のPHPでそれをやろうとしていない人のために...頑張ってください。
別のアプローチは、その1つのファイルを非圧縮にしてMSIをビルドし、それをテンプレートとして使用してファイルを上書きし、自己解凍型EXEをビルドすることです。それはおそらくあなたにとってはるかに簡単でしょう。MSIとXMLが修復トランザクションのためにキャッシュされることを確認してください。
それか、Windowsサーバーをセットアップしてビルドをサーバーに渡し、完了したらそれを元に戻します。