6

インストール中にカスタム アクションの進行状況テキストを表示したいと考えています。カスタム アクションの WiX Progress Text のようにコードを実装しましたが、機能しません。

他のすべてのテキスト (ファイルのコピーなど) が表示され、ActionText テーブルが正しく入力され、ActionText.Action が CustomAction.Actuib 値と一致します。誰が何がうまくいかないのか知っていますか?コードは次のとおりです。

主な WiX プロジェクト:

<Product>
  <CustomAction Id="MyCA" BinaryKey="MyCALib"
                DllEntry="MyCAMethod" Execute="deferred"
                Return="check" />
  <InstallExecuteSequence>
     <Custom Action="MyCA" Before="InstallFinalize" />
  </InstallExecuteSequence>
  <UI>
    <UIRef Id="MyUILibraryUI" />
  </UI>
</Product>

UI ライブラリ:

<Wix ...><Fragment>

  <UI Id="MyUILibraryUI">

    <ProgressText Action="MyCA">Executing my funny CA...
    </ProgressText>

    ...

    <Dialog Id="Dialog_Progress" ...>
      <Control Id="Ctrl_ActionText"
               Type="Text" ...>
        <Subscribe Event="ActionData" Attribute="Text" />
      </Control>

  ...

C# カスタム アクション ライブラリ:

public class MyCALib
{
  [CustomAction]
  public static ActionResult MyCAMethod(Session session)
  {
      System.Threading.Thread.Sleep(10000); // to show text
      // do something
      System.Threading.Thread.Sleep(10000); // to show text

      return ActionResult.Success;
  }
}
4

1 に答える 1

3

問題は、「ActionData」を使用しているが、カスタム アクションからこのアクション データを使用して UI にメッセージを送信していないことです。

次のようなものを追加する必要があります。

public class MyCALib
{
  [CustomAction]
  public static ActionResult MyCAMethod(Session session)
  {
      using (Record record = new Record(0))
      {
          record.SetString(0, "Starting MyCAMethod");
          Session.Message(InstallMessage.ActionData, record);
      }

      System.Threading.Thread.Sleep(10000); // to show text
      // do something
      System.Threading.Thread.Sleep(10000); // to show text

      return ActionResult.Success;
  }
}

CA から必要な数のメッセージを送信できます。

代わりに「ActionText」を使用していた場合は機能しますが、追加/カスタム情報なしでカスタム アクション名が表示されます。

ここで追加情報を見つけることができます:

WiX: CustomAction 中にステータス テキストを動的に変更する

于 2014-01-07T14:54:10.763 に答える