私はこの答え以下、デフォルトのWiXのProgressDlgのカスタムステータスメッセージを表示しようとしているのカスタムステータスメッセージを示しています。これまでのところ、私は私のカスタムアクションでこのコードを持ってウィックスは、ProgressDlg
WiX: dynamically changing the status text during CustomAction :
<Binary Id="CuCustomInstallActionsBinary" SourceFile="$(var.ConsoleApplication1_TargetDir)CustomAction1.CA.dll" />
<CustomAction Id="CuCustomActionOnAfterInstall" BinaryKey="CuCustomInstallActionsBinary" DllEntry="CustomAction1" Execute="deferred" HideTarget="no" Return="check" Impersonate="no" />
<InstallExecuteSequence>
<Custom Action="CuCustomActionOnAfterInstall" Before="InstallFinalize"><![CDATA[(NOT Installed) AND (NOT REMOVE)]]></Custom>
</InstallExecuteSequence>
:
public class CustomActions
{
[CustomAction]
public static ActionResult CustomAction1(Session session)
{
Debugger.Launch();
session.Log("Begin CustomAction1");
MessageTest(session);
return ActionResult.Success;
}
private static void MessageTest(Session session)
{
for (int i = 0; i < 10; i++)
{
using (Record r = new Record(0))
{
r.SetString(0, $"Hello worls {i}");
session.Message(InstallMessage.ActionData, r);
}
Thread.Sleep(1000);
}
}
}
そして、Product.wxsに下記のXMLフラグメントを有します
しかし、UIに何も表示されていません。カスタムアクションが実行されている間、ステータスメッセージは空のままです。
これをacomplishするために行われるべき何か他のものはありますか?たぶんこれを書いて<Subscribe Event="ActionData" Attribute="Text" />
このために独自のカスタムProgressDlgを実装する必要はありますか?
MSIのActionTextテーブルを使用して、カスタムアクションごとに1つのカスタムメッセージを適用できます。 – jbudreau
@jbudreau私が理解している限り、ActionTextは現在のアクション名を表示しますが、代わりにカスタムメッセージを表示する必要があるため、ActionDataが必要です。 – Oscar
ActionTextテーブルを見ると、3つの列があります。実行中のカスタムアクションの名前に一致します)、 'Description'(カスタマイズされた/ローカライズされた表示文字列を配置する場所)、 'Template'(MSIログファイルにActionDataを出力するために使用されます)完成したMSIファイルを開き、ActionTextテーブルを参照して、各列のデータがどのように読み込まれるかを確認します。 – jbudreau