2012-07-30 7 views
5

私はかなり長いCustomActionをwixインストーラで使用していますが、操作が実行されている間は 'Status:...'進捗状況と内部状況の更新 私はカスタムアクションのプログレスステムを設定する方法を知っていますが、私が望むのは、カスタムアクションの実行中にプログレステキストを動的に変更することです。WiX:CustomAction中にステータステキストを動的に変更する

答えて

8

遅延カスタムアクションは、MsiProcessMessage関数を呼び出すことができます。 INSTALLMESSAGE_ACTIONSTART、INSTALLMESSAGE_ACTIONDATA、およびINSTALLMESSAGE_PROGRESSを使用して、UIまでのメッセージをパブリッシュできます。

カスタムアクションを小さなカスタムアクションに分割し、ProgressText(ActionTextテーブル)を使用してインストールのさまざまな段階を記述することもできます。

CAがあまりにも多くの作業を行うと、ロールバックを正しく計画することが難しい場合があります。

using (Record record = new Record(0)) 
    { 
     record.SetString(0, "foo"); 
     session.Message(InstallMessage.ActionData, record); 
    } 

usingステートメントは、基礎となるMSIハンドルを解放するために、レコードを配置する:

Obtaining Context Information for Deferred Execution Custom Actions

MsiProcessMessage function

は、C#/ DTFを使用して、それはのようになります。レコードのフィールド数とデータの設定方法は、ActionTextテーブルで定義されたテンプレートに依存します。

+0

ありがとうございます。私はこれが私が探していたものだと信じています。カスタムアクションはC#で書かれていますが、おそらくDTFの説明がありますか? –

+0

DTFドコのすべてのクラスとメンバは、基礎となるMSI APIの対応を参照しており、ヘルプファイルの検索タブを使用して見つけることができます。サンプルを提供するために私の答えを更新します。 (あなたは、あなたがCAをプログラミングしているものについて言及していませんでした) –

+0

ありがとう。魅力的な作品:) –

0

クリスは正しくCAからActionDataにメッセージを送信する方法を説明しましたが、あなたでは、InstallShieldを使用している場合、あなたはSetupProgressダイアログのラベルを作成し、それにActionDataテキストイベントをサブスクライブすることを確認しました。つまり、ラベルにActionTextイベントを作成するだけでは、ActionTextテーブルで作成したCA記述が表示されるだけでは不十分です。

関連する問題