【DO!BOOK・ページリンク】
2010_migaro_techreport_001   60 / 84

BOOKをみる

10秒後にBOOKのページに移動します


58 【汎用性】 ・複数のExe を管理する場合も、ツー ルですべて管理できる。 ・Exe の置き換えだけでなく、新規Exe の配布も行える。 ・ツールとして提供されるため、機能の カスタマイズは行えない。 【Exe 置き換えのタイミング】 ・Exe の置き換えはPC 起動時やスケ ジュールされたタイミングで行われる ため、それにあわせて新しいExe を配 布する必要がある。 (2)独自に仕組み、プログラムを構築して Exe置き換えを運用 【実現コスト】 ・ツールの導入費用が不要である。 ・置き換えの仕組み、プログラムの作成 (開発工数とスキル)が必要である。 【汎用性】 ・個々のExe ごとに、置き換えのプロ グラムを用意する必要がある。 ・新規にExe を作成した場合、初回配 布は手動で行う必要がある。 ・自動置き換えのプログラムに機能拡張 や修正が必要となった場合、自動置き 換えのプログラム自体の置き換えが必 要となる。 ・必要に応じてカスタマイズした仕組み の開発が可能である。 【Exe 置き換えのタイミング】 ・Exeの実行時に置き換えができるため、 確実に新しいExe を利用することがで きる。  このように2 つの手法は、それぞれメ リット/ デメリットとなる点が異なる。  開発の必要性や汎用性を考慮すると、 (1)配布ツールを使って運用する場合も 多いが、本稿では、Delphi/400 の開発 テクニックとして(2)Exe の自動置き 換えの仕組みをプログラムで実現する例 を紹介したい。 3. 自動置き換えの 実現方法  ここからは、Exe のバージョンチェッ ク.置き換えを行うにあたり、技術的な 実現方法について説明していきたい。  まず、自動置き換えを行うには、Exe を3 つ準備する必要がある。 ● AExe:チェック/ 置き換えを行うExe ● BExe:置き換えが行われる実行Exe ● CExe:最新版の実行Exe  AExe はバージョン情報をチェックし て、BExe を最新のCExe に置き換える。 その後、BExe を起動する。つまり、 AExe を起動することで、自動的に最新 に置き換えられたBExe が起動する仕組 みである。【図1】  AExe とBExe はクライアントPC の 同一フォルダに保持し、CExe はファイ ルサーバーなど、システム利用者がアク セス可能な領域で一元管理を行うものと する。なお、システム利用者の権限によ りアクセス制限が設けられている場合、 自動置き換えが実施できなくなるため注 意が必要である。  次に、ここで3 つのExe 構成をとる 理由について説明しておく。  最新版としてのCExe はいうまでもな いが、AExe とBExe をわざわざ分ける のには理由がある。  本来、バージョン情報のチェックだけ であれば、BExe 単体でも可能である。 しかし、同時にファイルの置き換えを行 う必要があるため、BExe 単体では実行 中の自身を最新版のCExe と置き換える ことができない。そのため、バージョン 情報のチェックと置き換え処理を兼ねた AExe が必要となるのである。 バージョン情報  BExe とCExe の置き換え有無の判断 については、各Exe ファイルが保持し ているバージョン情報を利用する。  そこで、Exe ファイルバージョン情 報の設定方法、バージョン情報を取得す るGetProductVersion 関数についてそ れぞれ紹介する。  バージョン情報の設定方法は以下の通 り。【図2】 @ Delphi の[メニュー]→[プロジェ クト]→[オプション] Aバージョン情報タブの「バージョン 番号を含める」にチェックを付ける。 B「モジュールのバージョン番号」に任 意の番号を設定する。  また、バージョン情報の取得は、次の ようになる。  ソース例のように、関数を利用するこ とにより、BExe とCExe のバージョン 情報を取得/ 比較し、ファイル置き換え の有無をチェックする。【図3】  引数PGNM に指定したファイルの バージョン情報を、文字列として返却す る。なお、例外が発生した場合は、N/ A を返却する。【図4】 自動置き換え  準備についての説明を終えたところ で、本題である実現方法の説明に話を進 めたい。BExe とCExe はバージョン チェック、置き換えに利用するだけであ り、ここからはAExe の動作について 詳細に述べる。  まず、AExe の動作は大きく以下の5 ステップに分かれる。【図5】 ステップ@:BExe の絶対パスを取得 ステップA:CExe の絶対パスを取得 ステップB:BExe とCExe のバージョ ン情報を比較 ステップC:バージョン情報が異なる場 合、最新版への置き換え ステップD:BExe を実行  AExe の動作(5 つのステップ)につ いて、少し掘り下げて説明を続けたい。  以下、Delphi ソースを交えて説明を 行うにあたり、BExe、CExe の絶対パ スとして変数宣言が行われているものと する。【ステップ0】 @ BExe の絶対パスを取得  AExe とBExe が同一フォルダに保持 されていることを前提として、Extract FilePath 関数を利用して、BExe の絶対 パスを取得する。  また、ソース上のcExeName には、 実際に実行するBExe のファイル名(拡 張子含む)を定数として定義しておく。 【ステップ1】 A CExe の絶対パスを取得  CExe の絶対パスは、別途準備した ini ファイル(設定ファイル)より取得 する。  ini ファイルの利用については、次章 「4. 実行環境の変化への対策」で補足説 明を行う。【ステップ2】