何らかの理由で、独自のインストールGUIを備えた製品を提供しています。つまり、msiインストールをバックグラウンドでサイレントに実行します。
MSI API「MsiInstallProduct」を使用することで、製品をサイレントインストールできますが、このインストールの進捗データを取得する方法とキャンセルする方法がわかりません。
誰かアイデアがありますか?
何らかの理由で、独自のインストールGUIを備えた製品を提供しています。つまり、msiインストールをバックグラウンドでサイレントに実行します。
MSI API「MsiInstallProduct」を使用することで、製品をサイレントインストールできますが、このインストールの進捗データを取得する方法とキャンセルする方法がわかりません。
誰かアイデアがありますか?
2018年6月の更新:以下に示すツールはダウンロードできなくなりましたが、Waybackマシンで見つけました。ツールがフリーウェアだったので、リンクすることは問題なく合法だと思います。以下のリンクを更新しました。
更新:Wiseのこのツールは、残念ながらダウンロードできなくなりました。配布しても大丈夫かわかりません。メインのWisePackageStudioスイートの一部として配布されている無料のツールのようですが、オープンソースではないと思います。彼らがそれをオープンソースツールとしてリリースしてくれることを願っています。
ワイズパッケージ製品は、多くの法的な問題により廃止されました。
MSI APIを介して進行状況を取得できると思いますが、私があなたである場合は、msiexec.exeを介してインストールを呼び出した後、MSI自体から進行状況バーを表示します。
MSIは、いくつかの異なるインストールレベル(完全、完全サイレント、基本GUI、縮小GUIなど)をサポートします。あなたの場合、基本的なUIが必要なようです。これにより、キャンセルボタンを非表示にし、オプションで完了モーダルダイアログを表示できる進行状況バーが表示されます。
プログレスバー、キャンセルボタンなし、最後にモーダルダイアログなしでサイレントインストールします。
msiexec.exe /I "Test.msi" /QB-!
これらのばかげたmsiexecコマンドラインを手動で作成する必要をなくすには、Wiseのmsiコマンドラインビルダーツールを使用します: http ://www2.wise.com/filelib/WICLB.exe (Waybackマシンから復活)。
安全のため、 virustotal.comによるダウンロードを実行してください。

関連:
これがあなたが参照していることをしているように見えるサンプルプロジェクトです:http: //www.codeproject.com/KB/cs/msiinterop.aspx
MsiInstallProductの前にMsiSetExternalUIまたはMsiSetExternalUIRecordを使用して外部UIハンドラーを指定する必要があります(後者の方が優れていますが、MSIバージョンの要件が高くなります)。指定した関数は、Windowsインストーラーが処理を要求するメッセージごとに呼び出されます。これによりデータが得られ、応答する機会があればキャンセルするように指示されます。MSI 4.5以降が必要な場合は、ブートストラップを必要としない組み込みの外部UIハンドラーDLLを使用できます。