Lesson 10 標準ライブラリ

1. カスタム・アクションとユーザー・インタフェイス

SampleListbox は、どのようにすれば、 ユーザー・インタフェイスに表示されるデータをカスタム・アクションで収集することが出来るかを示しています。 これを実現するために、WiX に付属している WcaUtil カスタム・アクション・ライブラリを使います。 このライブラリは、C++ でカスタム・アクションを書くことを容易にしてくれる多くのユーティリティ関数を持っています。 その中には、プロパティを生の形式および整形された形式で取得および設定する関数や、インストーラ・データベースを修正する関数や、 Windows Installer のログ・ファイルにログを吐く関数なども含まれています。

訳註:SampleListbox の日本語版は Sample-10-1-Listbox.zip です。

組み込みの UI をわずかに修正して、新しいダイアログ、InstallDlg を作成します。 どうやってこれを実現するかは、これまでのレッスンで既に見ています。 つまり、ここには、まだ知らないものは何もありません。 カスタム・アクションを定義してスケジュールします。 リストボックスをパブリックなプロパティにリンクされるように定義します。

<CustomAction Id="FillingListbox" BinaryKey="FillListbox" 
    DllEntry="FillListbox" />

<UI>
  <Dialog Id="InstallDlg" Width="370" Height="270"
      Title="[ProductName] [Setup]" NoMinimize="yes">
    ...
    <Control Id="FilledListbox" Type="ListBox" Sorted="yes"
        Indirect="no" Property="LISTBOXVALUES" 
        X="10" Y="50" Width="200" Height="130" />
  </Dialog>

  <InstallUISequence>
    <Custom Action="FillingListbox" After="CostFinalize" />
    <Show Dialog="InstallDlg" After="FillingListbox" />
  </InstallUISequence>
</UI>

<Binary Id="FillListbox" SourceFile="FillListbox.dll" />

訳註:リストボックスで選択された項目を調べて使用する方法については、日本語のサンプルを参照して下さい。

カスタム・アクションは、Wca 関数を使って、インストーラとの接続を初期化したりクローズしたり、 パブリックなプロパティに現れる値を挿入したりします。 そして、このプロパティに接続されているリストボックスにその値が反映されます。

#include <windows.h>
#include <msi.h>
#include <msiquery.h>
#include "wcautil.h"

#pragma comment(linker, "/EXPORT:FillListbox=_FillListbox@4")

extern "C" UINT __stdcall FillListbox(MSIHANDLE hInstall) {
  HRESULT hResult = WcaInitialize(hInstall, "FillListbox");
  if (FAILED(hResult)) return ERROR_INSTALL_FAILURE;

  MSIHANDLE hTable = NULL;
  MSIHANDLE hColumns = NULL;

  hResult = WcaAddTempRecord(&hTable, &hColumns, L"ListBox", 
      NULL, 0, 3, L"LISTBOXVALUES", 1, L"いも", L"Item 1");
  hResult = WcaAddTempRecord(&hTable, &hColumns, L"ListBox",
      NULL, 0, 3, L"LISTBOXVALUES", 2, L"たこ", L"Item 2");
  hResult = WcaAddTempRecord(&hTable, &hColumns, L"ListBox", 
      NULL, 0, 3, L"LISTBOXVALUES", 3, L"なんきん", L"Item 3");

  if (hTable)
    MsiCloseHandle(hTable);
  if (hColumns)
    MsiCloseHandle(hColumns);
  return WcaFinalize(hResult);
}

この DLL をビルドするときには、msi.lib の他に、dutil.lib と wcautil.lib もリンクしなければなりません。 これらのファイルは WiX ツールセットとともにインストールされています。

↑ 先頭  |  • 目次  |  « 前へ  |  次へ »  |  ∗ 原文

Table of Contents

1 始めよう

  1. ソフトウェア・パッケージ
  2. 中に入るファイル
  3. 使用に供する
  4. 便利な追加機能
  5. どこにインストールするか
  6. 条件付きインストール
  7. ファイルだけでなく
  8. 削除時の孤児化

2 ユーザー・インタフェイス

  1. 最初のステップ
  2. カスタムの設定
  3. UI の魔法
  4. 英語はわかりますか
  5. チェーンの新しい環
  6. 地域化を考える

3 イベントとアクション

  1. 列に並んで
  2. 追加のアクション
  3. 本に書かれていないこと
  4. コントロールをコントロールせよ
  5. マネージする方法
  6. 後の段階で

4 アップグレードとモジュラー化

  1. 古いのを探す
  2. 自分自身を置き換える
  3. パッチワーク
  4. 断片
  5. 融合するもの

5 Net と .NET

  1. .NET の枠組み
  2. ブートストラップ
  3. インターネットを起動する
  4. ウェブ・ディレクトリ
  5. サービスの提供

6 COM、式の構文、その他

  1. 違う色のコンポーネント
  2. 式の構文
  3. 書式指定文字列
  4. DDE 接続
  5. ディレクトリの作成
  6. 複数メディアのインストーラ
  7. プログラムの追加と削除の項目
  8. 新顔のユーザー
  9. 環境に優しく
  10. XML
  11. COM+ アプリケーション
  12. バージョンごとに

7 SQL

  1. データベースを作成する

8 ユーザー・インタフェイス再び

  1. 一つだけのダイアログ
  2. チューニング・アップ
  3. 相互作用
  4. カスタマイズがいっぱい
  5. これが進捗ですか
  6. よく出来ました
  7. 法律用語
  8. 順番外
  9. 英語はわかりませんか

9 トランスフォーム

  1. インストーラを変形する

10 標準ライブラリ

  1. カスタム・アクションとユーザー・インタフェイス
  2. お静かに願います