Lesson 1 始めよう

5. どこにインストールするか

単独で動作するアプリケーションは、Program Files 以下の自分自身のフォルダにインストールされます — どうやってそれを実現するかは既に見たとおりです。 しかし、プラグインやアドオンに類する追加的な製品、すなわち、単独での使用を意図せず、 既にシステムにインストールされている他のプログラム(あなた自身のものであるか他の第三者のものであるかは問いません) に付属させて使う製品の場合は、いつ、そして、どこにインストールするべきかをまず知らなければなりません。 この情報をユーザーに提供するように求めることは、エレガントでないのと同時に、おそらく多くの場合は危険でもあるでしょう。 そのため、何をなすべきかを決定するために、レジストリに問い合わせたり、既にシステムに存在している .ini ファイルを調べたり、 あるいは実際のフォルダやファイルを探す方法が必要になります。

これらの項目を検索する場合、結果はプロパティ(文字列変数)に保存されます。 従って、プロパティを定義することから始めます (ここで使う Id が、最初のサンプルでインストール先のフォルダを意味するものとして使った名前と同じものであることに注意して下さい)。 Property タグの中で、レジストリ・サーチを実行します。それぞれの属性の意味は自ずから明らかでしょう。

<Property Id="INSTALLDIR">
  <RegistrySearch Id='PiyoHogeRegistry' Type='raw'
      Root='HKLM' Key='Software\Piyo\Hoge 1.0' Name='InstallDir' />
</Property>

レジストリ・サーチが成功した場合(すなわち、指定されたレジストリ・エントリが実際に存在している場合)は、 その値が INSTALLDIR プロパティに割り当てられ、私たちの目的に使用することが出来るようになります。 このことを確認するために、上記の行を最初のサンプルの Media タグの後ろに追加して、SampleRegistry.wxs として保存します (または、前と同じように、SampleRegistry をダウンロードします)。 コンパイルした後、インストールを開始する前に、レジストリに入って HKEY_LOCAL_MACHINE\SOFTWARE\Piyo\Hoge 1.0 キーを作成して下さい。 そして、InstallDir という名前の文字列値を新規作成して、システム上のどこかに作成した空っぽのフォルダを指すように設定します。 それから、ロギングを有効にしてインストーラを走らせて下さい。

訳註:SampleRegistry の日本語版は Sample-1-5-Registry.zip です。

すべて間違い無く出来ていれば、三つのサンプル・ファイルがこの新しいフォルダの中に出現します。 また、(スタート・メニューとデスクトップにある)ショートカットも、今度は、この新しい場所を指し示すようになっていることも注目して下さい。

同様の情報が他のソースから来る場合もあります。 \Windows\SampleRegistry.ini が以下のようになっていると仮定しましょう (システム・フォルダにあるこのようなファイルは、読み出すことしか出来ません)。

[Sample]
InstallDir=C:\InstallHere

前のセクションを以下の新しいものに置き換えます。

<Property Id="INSTALLDIR">
  <IniFileSearch Id='PiyoHogeIniFile' Type='directory'
       Name='SampleRegistry.ini' Section='Sample' Key='InstallDir' />
</Property>

場合によっては、単にフォルダ名を知るだけでは十分でなく、フォルダの中を見て、 指定されたファイルがそこに存在することを確認しなければならないこともあります。 Depth = n を使うと、指定された Path から n レベル下まで探すように、インストーラに指示を与えることが出来ます。 Depth 属性がゼロであるか、省略されている場合は、指定されたフォルダの中だけで探す(サブフォルダは見ない)ことを意味します。 Path の中で角括弧を使って、インストーラに INSTALLDIR プロパティのを使うように指示しています — 角括弧で囲まれた名前は検索されて、見つかれば、実際の値で置き換えられます。 見つからなかった場合は、文字列はそのまま変更されません。

<Property Id="FILEEXISTS">
  <DirectorySearch Id="CheckFileDir" Path="[INSTALLDIR]" Depth="0">
    <FileSearch Id="CheckFile" Name="Lookfor.txt" />
  </DirectorySearch>
</Property>

もしファイルが見つかれば、そのフル・パスが FILEEXISTS プロパティに割り当てられます。 そうでなければ、FILEEXISTS プロパティは、割り当てられないままになります。 このサンプル(前の RegistrySearch と、この断片の両方が必要になります)をビルドして、ロギングを有効にして走らせてみると、このことが確認出来ます。 レジストリで指定したフォルダに Lookfor.txt を置いてから走らせると、ログの中に、 ファイルのフル・パスを値として持つ FILEEXISTS への参照が出てくるようになります。

私たちはまだユーザー・インタフェイスを持っていませんが、 ユーザーとの何らかの相互作用から値を受け取ってインストール・ロジックに引き渡すためのプロパティ (ユーザーが選択するインストール先フォルダや機能を示すプロパティなど)は、 public なプロパティである必要がある、ということは、もう覚えておいても良いでしょう。 プロパティを public なものにするためには、名前を全て大文字にする必要があります。

同時に、Windows Installer は、製品をアップグレードするための方法として、 以前のインストールの特定のレジストリ・エントリを探すよりも、もっと良い方法を持っている、ということも知っておくべきです。 可能なときは常にそちらの機能を使用するべきです — しかし、説明がそこに行き着くまで、もう少し辛抱して下さい。

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

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