Lesson 3 イベントとアクション

5. マネージする方法

よくある質問の一つは、カスタム・アクションはマネージ・コード、つまり、C#、VB.NET またはそれに類するもので書くことが出来るか、というものです。 何と言っても、それらの実行時環境は、はるかに豊かな機能セットを提供してくれますからね。 それに、これらの言語で仕事をしているプログラマには、他のプログラミング言語をあまり知らない人もいるようです。

以前、WiX 2 の時代には、マネージ・コードでカスタム・アクションを書くためには裏技(hack)が必要で、 それは良くない危険な行為だと考えられていました。 しかし、WiX 3 になって、Deployment Tools Foundation (DTF) という .NET クラス・ライブラリと関連するリソースのセットが導入されたことによって、事情が変りました。 依存性による制約は明白です (インストール対象マシンに .NET が入っていることを確認しなければなりません。 おそらくは、ブートストラップ・インストーラを初めに使う必要があるでしょう。 また、ユーザーがアプリケーションをアンインストールする前に .NET Framework を削除すると、 アンインストールの際にも問題が生じる可能性があります) が、その制約を受け入れることが出来るのであれば、前のサンプルのカスタム・アクションを C# に移植したものを以下に示します。

namespace WiXTutorial.Samples
{
  using System;
  using System.Collections.Generic;
  using System.IO;
  using Microsoft.Deployment.WindowsInstaller;

  public class SampleCheckPID
  {
    [CustomAction]
    public static ActionResult CheckPID(Session session)
    {
      string Pid = session["PIDKEY"];
      session["PIDACCEPTED"] = Pid.StartsWith("1") ? "1" : "0";
      return ActionResult.Success;
    }
  }
}

SampleAskKeyNET のソース・コードには、ほんの一箇所だけ、修正が必要なところがあります。 DLL の名前は違うものになります。 と言うのは、Windows Installer とマネージされた世界の間隙を埋めるために、純粋なマネージ DLL を特殊なパッケージに包む必要があるためです。

訳註:SampleAskKeyNET の日本語版は Sample-3-5-AskKeyNet.zip です。

<Binary Id="CheckPID" SourceFile="CheckPIDPackage.dll" />

加えて、CustomAction.config という小さなファイルも用意して下さい。 このファイルは、マネージ・カスタム・アクションが依存するランタイムについて記述するものです。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <startup>
    <supportedRuntime version="v2.0.50727"/>
  </startup>
</configuration>

.NET 言語で仕事をするときの相対的な容易さには代償があります。 それは、ビルドのプロセスが複雑になるということです。 IDE を使えばいくらか簡単になるでしょう。 WiX ソース・パッケージの DTF 部門の下にサンプル・プロジェクト・ファイルがあります。 ここでは、コマンド・ラインによる方法を示すことしか出来ません。 Microsoft.Deployment.WindowsInstaller.dll, MakeSfxCA.exe および sfxca.dll を探して下さい。 インストールした WiX ツールセットの中にある筈です。 下記のコマンドで、path として記述している箇所は、省略しない絶対パスを指定しなければいけません。 そうしないと、MakeSfxCA はエラー・メッセージを出し、作成される DLL は役に立たない物になります。

csc.exe /target:library
        /reference:path\Microsoft.Deployment.WindowsInstaller.dll
        /out:CheckPID.dll CheckPID.cs
MakeSfxCA.exe path\CheckPIDPackage.dll
              path\sfxca.dll path\CheckPID.dll
              path\CustomAction.config
              path\Microsoft.Deployment.WindowsInstaller.dll
candle.exe SampleAskKeyNET.wxs UserRegistrationDlg.wxs
light.exe -ext WixUIExtension -out SampleAskKeyNET.msi
          SampleAskKeyNET.wixobj UserRegistrationDlg.wixobj

ツールセットの中には DTF 自体のドキュメントがあります。 従って、このチュートリアルでは、DTF についてこれ以上言及しません。そちらのドキュメントとサンプル・コードを使って下さい。

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

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. お静かに願います