0

さて、私はこの時点で完全に迷子になっています。私は通常、必要に応じてphpを少し知っているフロントエンド開発者です。ただし、ダウンロード用にユーザーが自分の電子メールアドレスを入力するダウンロードポータルが必要なクライアントがあります。これは、1つのキャッチを除いて十分に簡単です。アプリケーションは、その電子メールをxmlファイルに保存する必要があります。

私はこれを理解しようと一日中グーグルしてきましたが、私はMacで作業するフロントエンドのWeb開発者であるため、何を検索すればよいかわからないだけかもしれません。PHPはCENTOSWebサーバーにインストールされ、msiを抽出し、xmlファイルを挿入してから、ユーザーに提供するために再コンパイルできる必要があります。

どんな助けや指示も非常に役に立ちます。ありがとう!

4

1 に答える 1

1

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サーバーをセットアップしてビルドをサーバーに渡し、完了したらそれを元に戻します。

于 2013-03-10T13:05:36.483 に答える