1

一連の個々の MSI を同期的に起動するカスタム setup.exe プログラムがあります。msi を起動するために使用するスキームとコマンドは次のとおりです。

msiexcehandle = CreateProcess("msiexec.exe /i  product.msi /qr")
WaitForSingleObject(msiexechandle, INFINITE)

ここで、次のことを行います。ユーザーが setup.exe プログラムで [停止] ボタンを押したときに、インストールを完全に停止します。まだ開始されていない製品 msi のインストールを制御できますが、既に実行中のインストール (CreateProcess を使用して既に起動されている) にイベントを送信する方法が見つかりませんでした。setup.exe から msiexec.exe の作成した進行状況ダイアログに Cancel イベントを送信します。

このアクションを実行するためのテクニックを提案してください。コマンドラインからインストールを実行しているときにロールバックを呼び出すことはできますか?

参考までに、Wise を使用して MSI を作成し、VS 2008 MFC を使用して setup.exe を作成します。

-カートリー

4

1 に答える 1

0

おっしゃる通り、ありえないと思います。私が見る 2 つのオプションは、UI オートメーション (キャンセル ボタンのクリックをシミュレートする)、または CreateProcess() の代わりに MsiInstallProduct() で使用される外部 UI ハンドラーです。

いずれの場合も、セットアップをすぐにキャンセルできる、またはまったくキャンセルできない場合があることに注意してください。セットアップによってはそうでない場合もありますが、一部のセットアップでは、クリーンにロールバックできないことがわかっているため、特定の時点でキャンセル ボタンを無効にします。

于 2009-12-28T15:31:14.797 に答える