付録D.2 レコーダファイルの作成手順

レコーダファイルは,基本的に次の手順で作成します。

  1. インストール手順を調査する。
    リモートインストールするソフトウェアのインストーラを起動して,インストール手順を調査します。
  2. Visual Testでレコーダファイルを作成する。
    調査したインストール手順を基に,Visual TestのTest Basicを使ってレコーダファイルを作成,コンパイルして,JP1/NETM/DMで使用できるレコーダファイルにします。
  3. パッケージャにレコーダファイルを組み込む。
    完成したレコーダファイルをパッケージャに組み込みます。
<この項の構成>
(1) インストール手順を調査する
(2) レコーダファイルの構造
(3) Visual Testでレコーダファイルを作成する
(4) レコーダファイルをパッケージャに組み込む

(1) インストール手順を調査する

リモートインストールするソフトウェアのインストーラを起動して,そのインストール手順を調査します。このとき,インストーラが正常に動作しないソフトウェアは,JP1/NETM/DMでのリモートインストールの対象にはなりません。

なお,リモートインストールするソフトウェアがWindows Installerに対応している場合は,ソフトウェアのインストール画面をカスタマイズすることをお勧めします。終了時とエラー発生時にだけダイアログが表示されるようカスタマイズしてください。これによって,調査が必要なインストール手順が少なくなり,レコーダファイルの作成が容易になります。

次の項目について,インストール方法をOSごとに区別して調べ,インストール手順を紙に記録してください。

(a) インストール画面の順序と属性

インストーラが,ユーザに対して「何を,どのような順序で,どういった操作を要求してくるか」を調査する必要があります。何回か手動でインストールしてみて調査し,次の項目について一覧表にまとめてください。

なお,インストール方法や,インストールするPCの状態(OSの種類,ハードディスクの空き容量,メモリの空き容量,インストール済みのソフトなど)によって,インストールの操作は変わります。そのため,入念に調査する必要があります。

例えば,Acrobat Reader 5.05をインストールする場合,次の表に示す一覧になります。

表D-1 Acrobat Reader 5.05のインストールの流れ

#テキストクラス名操作親子属性親ウィンドウ備考
1Acrobat Reader 5.0.5 のセットアップ#32770
  • [次へ]ボタンをクリックする。
なしなし
2インストール先の選択#32770
  • 1回目は[参照]ボタンをクリックする。
  • 2回目は[次へ]ボタンをクリックする。
なし2回目は#4のあとへ
3ディレクトリの選択#32770
  • パス名にインストールパスを指定する。
#2インストール先を変更する場合だけ表示
4セットアップ#32770
  • [OK]ボタンをクリックする。
#3インストール先を変更する場合だけ表示
5セットアップの完了#32770
  • [いいえ,後でコンピュータを再起動します]を選択する。
  • [完了]ボタンをクリックする。
なしなし
(b) 各ダイアログボックスの属性の調査方法

レコーダファイルは,Visual TestのTest Basic言語で記述します。ボタンをクリックする,文字を入力する,キーを押すなどの操作は,すべてVisual Testで用意されている関数を使います。これらの関数には,引数が必要です。ダイアログボックスのウィンドウハンドル,ウィンドウクラス,タイトルのテキストといったダイアログボックスの属性を指定しなければなりません。そのため,「(a) インストール画面の順序と属性」で説明した作業のダイアログボックスの属性を調査する場合,Visual Testに付属する「ウィンドウ情報ユーティリティ」を使って記録することをお勧めします。

「ウィンドウ情報ユーティリティ」は,次のように使用します。

  1. Visual Testのプログラムグループから「ウィンドウ情報」を起動する。
    [ウィンドウ情報]ダイアログボックスが表示されます。
  2. [ウィンドウ情報]ダイアログボックスの左上にあるアイコンを,属性を調べたいダイアログボックスにドラッグ&ドロップする。
    次のような情報を取得できます。

    図D-2 [ウィンドウ情報]ダイアログボックスでウィンドウの情報を取得する流れ

    [図データ]

    図D-3 [ウィンドウ情報]ダイアログボックスでボタンの情報を取得する流れ

    [図データ]

    [ウィンドウ情報]ダイアログボックスの[クリップボード]ボタンをクリックすると,情報をクリップボードにコピーできます。テキストエディタなどに貼り付けて,情報をファイルに保存しておくことをお勧めします。
    なお,エディットボックスやコンボボックスに対して操作する場合,対象のボックスを示す文字列が必要になります。この文字列を確認する場合にも,「ウィンドウ情報ユーティリティ」を使います。[ウィンドウ情報]ダイアログボックス内の「関連付けるラベル」内の文字列が相当します。

(2) レコーダファイルの構造

レコーダファイルは次のような構成にするとわかりやすく作成できます。通常は網掛け部分だけをインストーラに合わせて作成してください。

図D-4 レコーダファイルの構成例

[図データ]

メイン処理の部分は,ユーザが誤って表示されたダイアログボックスに応答したり,キーボードやマウスを操作したりしたため,インストールが中断するような事態に備えて,レコーダファイルを作成することをお勧めします。レコーダファイルの処理例を次に示します。

図D-5 レコーダファイルの処理例

[図データ]

レコーダファイルは,ループ中で繰り返しダイアログボックスを検索します。したがって,ユーザが誤ってAウィンドウに応答してBウィンドウが表示された状態でも,レコーダファイルはAウィンドウの処理をスキップしてBウィンドウの処理を実行できます。

レコーダファイルを作成する場合は出力されるウィンドウを調査し,そのウィンドウに対する処理を並べます。このような処理構造によって出力されるウィンドウの順序やユーザの操作に関係なく処理を完結できます。

(3) Visual Testでレコーダファイルを作成する

記録したインストール手順を基に,Visual TestのTest Basic言語でレコーダファイルをコーディングします。まず,Visual Testの「シナリオレコーダー」を使ってインストール手順を自動的に生成させます。この自動生成されたコードは,レコーダファイルの原形になります。その後,自動生成されたインストール手順に修正を加え,コンパイルして,JP1/NETM/DMで使用できるレコーダファイルにします。

(a) Visual Testでイベントを記録する

Visual Testの「シナリオレコーダー」を使って,次のような手順でレコーダファイルの原形を作成します。

  1. Visual Testを起動し,メニューで[ツール]から[イベントの記録]を選択する。
    [シナリオレコーダー]ダイアログボックスが表示されます。シナリオ名を入力してください。

    図D-6 [シナリオレコーダー]ダイアログボックス

    [図データ]

  2. パッケージングしたいソフトウェアを実際にインストールし,イベントを記録する。
    このインストール作業では,マウスをできるだけ使用しないでください。マウスからの操作は,画面座標に依存してしまうため,レコーダファイルからインストーラへの確実な応答ができなくなってしまいます。マウス操作ではなく,キーボード入力のイベントを記録するようにしてください。
  3. イベントの記録を終了させ,インストール手順のコードを生成する。
    パッケージングしたいソフトウェアのインストール作業が終わったら,Visual Testのレコーダのアイコンをクリックして,イベントの記録を終了させます。レコーダのアイコンをクリックすると,[シナリオレコーダー(一時停止)]ダイアログボックスが表示されます。

    図D-7 [シナリオレコーダー(一時停止)]ダイアログボックス

    [図データ]

    [OK]ボタンをクリックすると,自動生成されたイベントが表示されます。

    図D-8 自動生成されたイベントの表示

    [図データ]

(b) レコーダファイルの作成手順

レコーダファイルの作成は,インストーラが出力するすべてのダイアログボックスの処理を組み合わせて作成します。

ダイアログボックスの処理は,次の処理を一つのパーツとしてループ中にシーケンシャルに並べます。

ダイアログボックスの検索は,WFndWindC関数を使用します。WFndWindC関数はダイアログボックスの「テキスト」と「クラス名」を入力情報としています。したがって,出力するダイアログボックスの「テキスト」と「クラス名」を調査する必要があります。

ダイアログボックスを調査するツールにはVisual Testの「ウィンドウ情報ユーティリティ」があります。

ダイアログボックスに対する操作には,次のような種類があります。

シナリオレコーダーで記録したイベントには,ダイアログボックスの情報やそのダイアログボックスに対する処理が記録されています。シナリオレコーダーで記録したイベントの例を次に示します。

図D-9 シナリオレコーダーで記録したイベントの例

[図データ]

このデータから次のようにレコーダファイルのダイアログボックス処理としてコーディングしてください。

図D-10 レコーダファイルのダイアログボックス処理としてのコーディング例

[図データ]

レコーダファイルを作成する上でダイアログボックスの検索に必要なWFndWndC関数の仕様について説明します。

WFndWndC関数
機能
ウィンドウを検索します。ウィンドウを発見すると,ウィンドウハンドルを取得し,指定によってはそのウィンドウにフォーカスを与えます。
構文:WFndWndC(text$,classname$,[flags],[timeout&])
  • text$
    検索するウィンドウに結び付けられたテキストを指定します。
  • classname$
    検索するウィンドウのクラス名を指定します。ダイアログボックスの場合は「#32770」固定です。
  • flags
    FW_FOCUS:ウィンドウを発見した場合にフォーカスを与えます。
    FW_EXIST:検索条件に一致するウィンドウを検索します。ウィンドウを発見した場合,ウィンドウハンドルを返却します。ウィンドウが発見できなかった場合,検索は失敗します。
    FW_ACTIVE_ONLY:アクティブウィンドウだけを検索します。
  • timeout&
    ウィンドウの検索に使用できる最大時間を秒単位に指定します。
戻り値
ウィンドウハンドルがlong型またはNULL(0)で返ります。
注意
  • 子ウィンドウが表示されているため活性化できない状態のダイアログボックスを活性化しようとするとランタイムエラーとなります。
  • 連続的に発行すると関数の終了に時間が掛かります。
(c) 複雑なレコーダファイルの作成方法

単純なソフトウェアのインストーラは,単純な構造のレコーダファイルで配布できます。しかし,インストーラによってはもう少し複雑なレコーダファイルを作成する必要があります。

ここでは,同一ウィンドウ名が出力される場合のレコーダファイルの作成方法,および子ウィンドウがある場合のレコーダファイルの作成方法について説明します。

同一ウィンドウ名が出力される場合のレコーダファイルの作成方法

レコーダファイルは,あるウィンドウ名に対してどのような応答をするかを決めて作成します。しかし,インストールするソフトウェアのインストーラによっては,同一ウィンドウ名で異なる応答が必要な場合があります。ここでは同一ウィンドウ名の対処方法について説明します。

次のような同一ウィンドウ名で異なる応答が必要な場合は,ウィンドウ内のテキストを判断材料に使います。

図D-11 同一ウィンドウ名で異なる応答が必要な画面の例

[図データ]

二つの画面とも「ようこそ」というウィンドウ名ですが,応答は異なります。このような場合は,WStaticExists関数を使って文字列を検索させます。

コメントの情報は「ウィンドウ情報ユーティリティ」でコメント部分にアイコンをドラッグ&ドロップすることで取得できます。

図D-12 [ウィンドウ情報]ダイアログボックスでコメントの情報を取得する流れ

[図データ]

同一ウィンドウ名のインストーラに対するレコーダファイルの作成例を示します。

図D-13 同一ウィンドウ名のインストーラに対するレコーダファイルの作成例

[図データ]

WStaticExists関数の第1引数を「+」から始めた場合,続きのテキストを含むテキストが存在すると「true」が返されます。長いテキストは「+」を付けることで前方一致で比較することができます。

このように,同じウィンドウ名の場合は,ウィンドウ内に異なる個所を見つけることで識別させます。そのほかにボタンの名称なども使用できます。

子ウィンドウがある場合のレコーダファイルの作成方法

実際のソフトウェアのインストーラにはウィンドウが階層的になっていることがあります。具体的には「子ウィンドウ」と呼ばれ,親ウィンドウからのアクションで表示されます。例えば,次のようなウィンドウのことを示します。

図D-14 子ウィンドウの例

[図データ]

この場合,「JP1/Script セットアップ」が親ウィンドウで「ディレクトリの選択」が子ウィンドウです。

このような環境で親ウィンドウをアクティブにしようとすると,WFndWndC関数がランタイムエラーとなってしまいます。

子ウィンドウは,親ウィンドウが出力されなければ出力されません。この特性を利用して,親ウィンドウがあるときに子ウィンドウの有無を確認し,子ウィンドウがある場合には子ウィンドウを処理し,子ウィンドウがない場合は親ウィンドウの処理をするようにします。処理例を次に示します。

図D-15 子ウィンドウがある場合の処理例

[図データ]

具体的なレコーダファイルの記述例を次に示します。

図D-16 子ウィンドウがある場合のレコーダファイルの記述例

[図データ]

(d) JP1/NETM/DMの拡張機能を使用するための修正

レコーダファイルの中では,Visual Testの多くの関数を使用できます。しかし,これだけではJP1/NETM/DMと連動させるには不十分なため,JP1/NETM/DMの拡張機能を使用します。そのための修正方法を次に示します。

JP1/NETM/DMの拡張機能を利用するためのファイルをインクルード
レコーダファイルの先頭にある,ほかの$INCLUDEメタコマンドの最後に,JP1/NETM/DMが用意している,ファイルをインクルードするステートメントを追加してください。
'$INCLUDE …
'$INCLUDE 'DMPTEST.INC' 'ここに追加
JP1/NETM/DM固有のグローバル変数を利用するためのサブルーチンを追加
JP1/NETM/DM固有のグローバル変数を利用するために,DMPSTPRCサブルーチンを呼び出さなければなりません。レコーダファイルでインストーラを起動する前の部分に,DMPSTPRCサブルーチンを追加します。
(例)
DMPSTPRC 'ここに追加
'インストーラを起動します。
run InstallerName, nowait
JP1/NETM/DM固有のグローバル変数の利用
JP1/NETM/DM固有のグローバル変数を利用して,レコーダファイル内で「インストール先ディレクトリ名」などのインストール情報を参照できます。実際の使用例は,「付録D.3 レコーダファイルの完成例」を参照してください。使用できるグローバル変数は,次のとおりです。
  • InstallerName
    インストール定義ファイルの「InstallerName = 」で指定した,インストールプログラム名。
  • InstallDrive
    クライアントのGUIで指定したインストール先ドライブ名。設定値がデフォルト値の場合は,DEFAULT_VALUEになります。
  • InstallDirectory
    クライアントのGUIで指定したインストール先ディレクトリ。設定値がデフォルト値の場合は,DEFAULT_VALUEになります。
  • InstallPoint
    InstallDrive変数とInstallDirectory変数の内容を結合した,インストール位置(ドライブ名を含むフルパス)。
  • InstallUserName
    クライアントのGUIで指定したソフトウェアの所有者名。
  • InstallCompanyName
    クライアントのGUIで指定したソフトウェアの所有会社名。
(e) レコーダファイルをコンパイルする

これまでの手順で作成したレコーダファイルのソースをコンパイルします。

  1. DMPTEST.INCファイルをコピーする。
    DMPTEST.INCファイルをレコーダファイルのあるディレクトリにコピーします。

    図D-17 DMPTEST.INCファイルのコピー

    [図データ]

  2. Visual Testのワークベンチからコンパイルする。
    Visual Testのワークベンチから,完成したレコーダファイルのソースをコンパイルしてください。コンパイルが成功すると,コンパイル結果のファイル(*.PC6ファイルまたは*.PCDファイル)が生成されます。この生成されたコンパイル結果のファイルが,JP1/NETM/DMで直接使用できるレコーダファイルになります。

(4) レコーダファイルをパッケージャに組み込む

Visual Testでコンパイルしたレコーダファイル(コンパイル結果のファイル)をパッケージャに組み込みます。レコーダファイルを決められたディレクトリに決められた拡張子でコピーすることで,組み込みは終了します。なお,レコーダファイル格納ディレクトリには,レコーダファイル以外のファイルは格納しないでください。

インストール方法が複数あるかどうかで拡張子が変わります。なお,拡張子は,コンパイル時に生成されたデフォルトのままで使用してください。インストール方法が1種類の場合の拡張子は,Visual Test 6.0でコンパイルした場合は「*.PC6」,Visual Test 4.0でコンパイルした場合は「*.PCD」です。

コピー先のディレクトリを次に示します。説明中の<RecordFileDirectory>という部分は,インストール定義ファイルのRecordFileDirectory項目で指定するディレクトリです。

インストール方法が一つの場合
<RecordFileDirectory>¥<任意のファイル名>.PC6
インストール方法が複数の場合
<RecordFileDirectory>¥<任意のファイル名>.1
<RecordFileDirectory>¥<任意のファイル名>.2
<RecordFileDirectory>¥<任意のファイル名>.3