2016-06-28 5 views
0

ダイアログのWixアップデートテキストでカスタムアクションを実行することはできますか?私はこれを行う様々な方法を探してきましたが、まだ私のために働いたことはありません。DoActionでテキストを更新する

私は

<Control Id="RunButton" Type="PushButton" X="0" Y="0" Height="18" Width="56" Text="Run"> 
    <Publish Event="DoAction" Value="CustomAction">1</Publish> 
</Control> 

と私のカスタムアクションで

<Control Id="MessageText" X="0" Y="20" Width="100" Height="18"> 
    <Subscribe Event="ActionData" Attribute="Text" /> 
</Control> 

を持っているテキストコントロールで定義されたプッシュボタンコントロールを持って、私は

using(var rec = new Record(0)){ 
    rec.SetString(0, "Starting..."); 
    session.Message(InstallMessage.ActionData, rec); 
} 

を持っているこれは、基本的なプロセスであり、私は多数のフォーラムで見つけましたが、それは私のために働いていません。

アクションは、Execute = "immediate"とReturn = "Check"と定義されています。

「レコード」オブジェクトを3つのフィールドに変更し、フィールド1,2,3に同じプロパティを設定してみました。これも機能しませんでした。

私が間違っていることを誰でも説明できますか?これはちょうどウィックスで実行できないのですか?基本的に私は、カスタムアクションで長期実行プロセスを設定しようとしており、アクションの進行状況をユーザーに報告できるようにしたいと考えています。

答えて

2

あなたはDoActionにのためにドキュメントをチェックした場合:

https://msdn.microsoft.com/en-us/library/windows/desktop/aa368322(v=vs.85).aspx

それはそれが最も可能性が高い理由ですので、あなたは、session.messageが実際に下にあるものである、MsiProcessMessage経由でメッセージを送信できないことを言いますそれは動作していないためです。私はあなたが見ているフォーラムでは、この特定のケースの警告なしでMsiProcessMessageの一般的な使用を記述していると思います。

カスタムアクションが何をしているのか分からず、何も示唆することはできません。実行シーケンスでは、あなたのCAを進捗バーに統合することができますが、UIシーケンスに入っています。おそらく大量のデータを収集したり、何かをチェックしたりしています。

カスタムアクションでシステムが更新された場合、カスタムシーケンスは遅延カスタムアクションとして実行されます。プログレスバーに影響を与え、何が起きているのかを説明するだけでなく、インストールが失敗するか、ユーザーがキャンセルする可能性があるだけでなく、トランザクションインストールの全体的なポイントは、開始しました。つまり、データベースを保存してロールバックカスタムアクションで復元する必要があります。もう1つの問題は、UIでの即時カスタムアクションが向上していないため、データベースを更新できないことがあることです。それだけでなく、サイレントインストールでUIがバイパスされるため、カスタムアクションは呼び出されず、グループポリシーやSCCMメソッドを使用して製品をロールアウトすることはできません。

+0

私はデータベースアップグレードページ(私はこのアプリケーションのデータソースとしてSQLiteを使用しています)を持っていて、ユーザーがカスタムアクションを呼び出すアップグレードボタンをクリックするようにしました。私の希望は、CAを使用してデータベースのアップグレードプロセスをロードし、進行状況が変更されたときにActionDataメッセージをインストーラに返すイベントリスナーを添付することでした。 VS2008の古いWindowsインストーラを使用して、カスタムダイアログページを生成して正確にそのページを作成することができました。私はWPFを使って同様のことをすることができますか?進行状況を処理するために、CAがWPFウィンドウをモーダルにスポーンするようにしますか? – CodeMonkey

1

Windowsインストーラの内部UIは間接的に更新されません。基本的には、1つのアップデート(詳細に似ています)をしたいのか、進行状況のメッセージを探しているのか(あなたのアプローチに似ています)を決定する必要があります。進捗メッセージについては、実行順序の一部である必要があるため、PhilDWの答えに耳を傾ける必要があります。 (ボタンをクリックするユーザとして)UIイベントに応答して、ワンタイム更新については、プロパティとてSetPropertyコントロールイベントを使用することを検討してください:

  • あなたのコントロールは、Pudding: [FLAVOR]としてプロパティの参照を含むテキストを表示する必要があります。
  • DoActionコントロールイベントでは、おそらくFLAVORというプロパティーを設定することもできますが、わかりやすくするために、FLAVOR_FROMDOACTIONを提案することもあります。
  • 次に、FLAVOR[FLAVOR_FROMDOACTION]に設定するSetPropertyコントロールイベントを追加します。これにより、コントロールのテキストが更新されます。
関連する問題