インストール プロセスで、含まれているファイル/コンポーネントと共にそれ自体を TargetDir に展開する MSI を構築したいと考えています。
そのため、MyApp.msi のファイル テーブルには、MyApp.exe と MyAppBootstrapperEmpty.exe (リソースなし) が含まれています。
ユーザーは MyAppBootstrapperPackaged.exe を起動します (MyApp.msi をリソースとして含み、インターネットのどこかから、または電子メールなどから取得します)。MyAppBootStrapperPackaged.exe は、MyApp.msi を一時フォルダーに抽出し、msiexec.exe を介して実行します。
msiexec.exe プロセスが完了したら、MyApp.msi、MyBootstrapperEmpty.exe (および %ProgramFiles%\MyApp フォルダー内の MyApp.exe が必要です。これにより、MyApp.exe は実行時に MyApp.msi に確実にアクセスできるようになります (以下を作成するため)。言及されたパッケージ内容)。
MyAppBootstrapper*.exe は、MyApp.msi を %ProgramFiles%\MyApp フォルダーにコピーしようとする可能性がありますが、そのためには昇格が必要であり、Windows インストーラーのアンインストール プロセス ([プログラムの追加と削除] などから) による削除は許可されません。保存する必要があります。
明らかに(明らかだと思います-間違っていますか?)メディア/ CAB(鶏と卵のシナリオ)にファイルとしてMSIを含めることはできないため、インストール前にカスタムアクションを介して実行する必要があると思います元の MSI を MSI DB のメディア/CAB に追加し、その場でファイル テーブルに適切なエントリを追加します。これを行うことができますか?
コンテンツ ファイルがアプリと一緒にのみ配布されるコンテンツ配布モデルを考えてみてください。コンテンツは、実行時にアプリを介してエンド ユーザーによって生成され、アプリとコンテンツの両方を含む配布可能な EXE にパッケージ化されます。
MyApp のインストーラーは MSI のままである必要がありますが、Bootstrapper EXE によって実行される場合があります。インストールされた MyApp.exe は、MyApp.msi と EXE の両方にアクセスできる必要があります。EXE は、MSI によってインストールされる基本 (空の) MyAppBootstrapper.exe からアプリによって実行時に「アセンブル」されます。エンドユーザー。EXE のリソース MSI は、ランタイム パッケージを実行するアプリのインストールに使用されたものと同じである必要があります。
WIX は MyApp と一緒にインストールする必要はありません。
実行時/パッケージング時にネットワークに依存することはありません (つまり、Web サービスを介してパッケージ化を行うことはできません。ローカルで行う必要があります)。
私はカスタム アクション (マネージドおよびアンマネージド、DTF 経由など) に精通しています (そして使用しています)。