Visual Basic 業務アプリ構築法 第33回

コンテキストメニューとインストーラの作成
長谷川裕行
2001/01/16

長谷川 裕行 (はせがわ ひろゆき)
有限会社 手國堂 代表取締役
http://www.hirop.com/
テクニカルライターとして活躍。プログラミングに関する著書多数、DB Magazineなどにも多くの記事を提供している。

作成したアプリケーションを他のコンピュータで実行できるようにするには、インストーラ(セットアップ・プログラム)が必要です。単にexeファイルをコピーするだけでは、正常に動作しません。特に業務アプリケーションでは、データベースなどexeファイル以外に様々なファイルをコピーし、設定する必要があります。インストールプログラム(インストーラ)の作り方を紹介しておきましょう。


メニューの補足
コンテキストメニューの作り方

インストーラの作成方法に入る前に、前回紹介したメニューの補足として、右ボタンをクリックしたときに表示されるコンテキストメニューの作り方を紹介しておきます。


- コンテキストメニュー -

Windowsアプリケーションでは、ある処理を実行中にマウスの右ボタンをクリックすると、そのときの処理内容に応じたメニューが表示されるものがあります。このとき表示されるメニューをコンテキストメニュー(状況感知型メニュー)、またはショートカットメニューと呼びます。
メニューバーに表示されるメニューは、(コードによって機能の有効/無効が切り替えられるとしても)半ば固定的です。対してコンテキストメニューは、その場の状態(ユーザーの操作状況)に応じて必要な機能だけを表示させる形となります。

画面1:InternetExplorerのコンテキストメニュー


- コンテキストメニューはなくても困らない -

実のところ業務アプリケーションでは、コンテキストメニューの出番はそう多くありません。
コンテキストメニューの多くは、そのとき実行している処理に対する補助的な作業を実行するための項目を列挙したものです。ワープロや表計算などの汎用アプリケーションでは、非常にたくさんの機能がメニューバーに割り当てられています。しかも、ある操作の途中でユーザーが次に何をするか、予測できません。
ワークシートを開いて罫線を引いているときに、罫線の線種を変更したくなる場合もあるでしょう。そのような場合に、メニューバーから項目を選ぶより、右ボタンのクリックでそのとき必要な機能だけを選択できるのは便利です。
しかし業務アプリケーションでは、実行したい処理が明確でその数も限定されており、さほど多くの補助作業を必要としない場合が多いため、わざわざコンテキストメニューで補助する必要性はそう多くないのです。
もちろん、商品名を入力している途中でその内容をクリップボードにコピーするため、コンテキストメニューで「コピー」の項目を表示しても構いません。これは、業務の遂行を支援するというより、ユーザーサービスに近いものとなります。
コンテキストメニューがなくてもユーザーはさほど困らないことを、念頭に置いておきましょう。それより、基本処理を充実させる方が重要です。


- メニューエディタで作る -

以上のことを踏まえた上で、あれば便利な機能をコンテキストメニューとして装備しましょう。コンテキストメニューは、非常に簡単に作成できます。
表示されるメニューは、予めメニューエディタで作成しておきます。メニューエディタの使い方は、前回(第32回)を参照してください。
コンテキストメニューは縦1列にしか表示されないため、メニューバー上の項目をすべて表示させることはできません。メニューバーに表示させるメニューの中から、1つのポップアップ項目を指定します。
コンテキストメニューとして表示させても、メニューバーには表示させたくない項目もあるでしょう。メニューバーに表示させたくないコンテキストメニュー専用の項目は、メニューエディタでポップアップ項目を選択して「表示」のチェックをOFFにしておきます。これでポップアップ項目は、メニューバーに表示されなくなります。


- メニュー項目を追加する -

ここでは、前回(第32回)で取り上げたサンプルを使います。メニューエディタで画面2のように「補助操作」というポップアップ項目を追加し、そこから「補助機能1」「補助機能2」「補助機能3」という3つの項目を選択できるようにしてみましょう。
項目の名前(オブジェクト名)は以下のようにしています。

補助操作:popSub(ポップアップ項目)
補助機能1:Sub1
補助機能2:Sub2
補助機能3:Sub3


画面3は、ポップアップ項目「補助操作」の表示をOFFにしているところです。これで、「補助操作」というメニューはメニューバーには表示されなくなります。このとき、ポップアップの下のメニュー項目(「補助機能1」など)は「表示」をONのままにしておきます。これをOFFにすると、コンテキストメニューに項目が表示されません。
同じ「表示」チェックボックスでも、ポップアップ項目はメニューバー上の表示/非表示、メニュー項目はメニューリスト内の表示/非表示を指定するので、注意してください。

画面2:メニューエディタで項目を追加する
画面3:コンテキストメニュー専用の項目は非表示にしておく


- PopupMenuメソッドで表示する -

メニュー項目を作成したら、マウスの右ボタンがクリックされたときにメニューを表示するという処理を記述します。
フォーム上でマウスボタンがクリックされると、MouseUpイベントとMouseDownイベントが発生します。これに応じるプロシージャを作り、その中でメニューを表示させます。
コンテキストメニューは、フォームのPopupMenuメソッドで表示します。書式は以下の通りです。

PopupMenu メニュー名

PopupMenuメソッドを実行すると、フォーム上にメニュー(コンテキストメニュー)を表示した状態で、ユーザーの操作を待ちます。ユーザーがメニューの項目を選択すると、その項目に対応したイベントプロシージャが実行されます。ユーザーが[ESC]キーを押したり、メニュー以外の領域をクリックするとメニューが取り消され、続くコードが実行されます。


- メニューバーの項目も表示できる -

今回のサンプルは、前回紹介したアプリケーションにリスト1~2のコードを追加し、コンテキストメニューを表示するようにしたものです。
リスト1のPopupMenu popSubという部分が、メニューエディタで作成したポップアップ項目“popSub”を表示する処理です。
ここをPopupMenu popFileまたはPopupMenu popViewのように書き換えれば、メニューバーと同じ項目が表示されるようになります。

リスト1:コンテキストメニューを表示する
リスト2:補助メニューを表示するプロシージャ


アプリケーションの配布(1)
下準備

業務アプリケーションも、他の一般的なアプリケーションと同じように、インストール作業が必要です。VBには、インストール用プログラム(Setup.exe)を生成する機能が備わっています。


- ディストリビューション・ウィザード -

VBでexeファイルを実行するには、ランタイムファイル(VB 6.0の場合ならMSVBVM60.DLL)が必要です。また、標準以外のコントロールを使用した場合にはそのためのファイル(OCXなど)、データベースを使用すればデータベース・エンジンなどなど、exeファイル以外に様々なファイルを適切な場所にコピーし、適切に設定しなければなりません。
インストール用プログラムは一般にSetup.exeという実行形式のファイルで、その他に実際にコピーされるファイルを圧縮したCabファイル、Cabファイルから解凍した各ファイルのコピー先などが示された設定ファイルが必要です。これらを合わせて、配布パッケージと呼びます。
VBではディストリビューション・ウィザードというアドインによって、手軽に配布パッケージが作成できます。
配布パッケージに含まれるexeファイルは、完成品でなければなりません。バージョン番号の管理やアプリケーション・アイコンの設定など済ませ、コンパイルして完全なexeファイルを生成しておきましょう。


- バージョン管理とアイコンの設定 -

メニューから「プロジェクト(P)」→「Project1のプロパティ(E)」を選択し、オープンしたダイアログボックスの「実行可能ファイルの作成」タブをクリックすると、画面4のようにバージョン番号、アプリケーションのファイル名、アイコンなどの設定ができます。
バージョン番号は、初期状態では"1.0.0"となっています。「自動インクリメント(U)」をチェックしておくと、コンパイルするたびにリビジョン番号が1ずつ増加します。完成後に細かな修正をして動作テストを重ねる場合、「自動インクリメント(U)」をチェックしてバージョン管理を行うと便利です。
アイコンは、あらかじめ用意した拡張子icoのアイコンファイルを指定します。
Visual StudioのVisual C++統合環境で「ファイル(F)」→「新規作成(N)」でオープンするダイアログボックスから「ファイル」タブをクリックして「アイコンファイル」を選択すれば、アイコンファイルを作成できます。
社内で用いる業務用アプリケーションの場合、凝ったアイコンを付ける必要はないでしょう。

画面4:バージョン番号やアイコンの設定ができる


- コンパイル -

コンパイル前のプロジェクトの段階では、作成したアプリケーションは統合環境内でしか実行できません。VBがインストールされていない環境で実行させるためには、必ずexeファイルを生成します。
コンパイルは非常に簡単です。プロジェクトファイルを読み込み、メニューから「ファイル(F)」→「xxxx.exeの作成(K)」を選択するだけです。"xxxx"の部分には、開いているプロジェクトの名前が入ります。Zaikocl.vbpなら、Zaikocl.exeとなっています。
このメニューを選択すると、「実行可能ファイルの作成」ダイアログボックスがオープンし、exeファイルの保存先と名称を指定できます。この段階でexeファイルの名前を変更することも可能です。
これで準備が整いました。あとはディストリビューション・ウィザードで配布パッケージを作成します。


アプリケーションの配布(2)
配布パッケージの作成

ディストリビューション・ウィザードは、exeファイルとランタイムファイル、各種補助ファイル、それらのコピー場所などを指定した設定ファイルを含んだ配布パッケージを生成します。


- exeファイルだけでは動かない -

VBで作成したアプリケーションは、最低限ランタイムファイルと呼ばれるDLLファイル(MSVBVM60.DLL)がなければ動作しません。
また、ADOなど標準以外のコントロール、Jetデータベース・エンジンなど、業務アプリケーションでは様々なファイルを使用します。これらはすべてexeファイルと共に、実行するコンピュータにインストールしなければなりません。
  コントロールやデータベース・エンジンは、Windowsのシステムフォルダにコピーしてレジストリの設定を行う必要もあります。
ディストリビューション・ウィザードを使えば、これら必要なファイル群をインストール先コンピュータの適切なフォルダにコピーし、適切に設定するSetup.exeを生成できます。


- ディストリビューション・ウィザードを -
- ロードする -


ディストリビューション・ウィザードはアドインツールなので、使用するにはメニューから「アドイン(A)」→「アドインマネージャ(A)」でアドインマネージャを起動し、画面5のように「ディストリビューション ウィザード」を選択してロードしなければなりません。

画面5:ディストリビューション・ウィザードをロードする


- 配布パッケージの作成手順 -

配布パッケージを作るには、ディストリビューション・ウィザードでコンパイル済みのexeファイルと必要なファイル群を指定していきます。手順は以下の通りです。

(1) 配布パッケージを作りたいアプリケーションのプロジェクトを読み込む
(2) メニューから「アドイン(A)」→「ディストリビューション ウィザード」を選択する
ディストリビューション・ウィザードが起動します。ネットワークを通じたアプリケーションの配布環境や、生成したインストール環境の変更などもできますが、ここでは「標準パッケージ」によるインストール環境を作成します。
(3) [パッケージ(P)]ボタンをクリックする
パッケージの形式を選択する画面になります(画面6)。
(4) 「標準セットアップパッケージ」を選択して[次へ]をクリック
このとき、コンパイルされたexeファイルよりソースファイルの方が新しければ、再コンパイルを促すダイアログボックスがオープンします。
画面に表示されている「依存ファイル」とは、アプリケーションと共に配布する必要のあるDLLファイルなどの関連ファイルの情報です。「標準のセットアップパッケージ」を選べば、依存情報のリストも自動的に生成されます。

画面6:「標準セットアップパッケージ」を選択する

(5) 配布パッケージを保存するフォルダを指定する
(6) 指定したフォルダを選択して[次へ >]をクリック
DAOやADOを使用したアプリケーションでは、画面7のようなドライバを選択するダイアログボックスがオープンします。「使用可能なドライバ(A):」からインストールに必要な項目を選択し、[>]ボタンで「組み込まれているドライバ(I):」に追加していきます。

画面7:一緒にインストールするドライバを選択する

(7) リストを確認して[次へ >]をクリック
パッケージに含まれるファイルの一覧が表示されます。
ここで組み込まれるファイル群は、プロジェクトの構成から判断されます。アプリケーションが個別に利用するデータファイルなどは、自動的に組み込まれません。そのようなファイルは、ここで[追加]をクリックして組み込んでおきます。
(8) リストを確認して[次へ >]をクリック
Cabファイルのオプションを指定する画面になります。Cabファイル(キャビネットファイル)とは、インストール用の圧縮ファイルです。インストール環境をCD-ROMに焼いたり、ネットワークを介してサーバーからコピーする場合には「単一のCabファイル(S)」、フロッピーディスクを使用する場合は「複数のCabファイル(M)」を選びます。
複数のCabファイルを選択した場合は、その下の「Cabファイルのサイズ(C):」のリストでインストールに使用するフロッピーディスクの容量を選択します。
(9) [次へ >]をクリック
タイトルを入力する画面になります。ここで入力した文字列が、Setup.exeのウィンドウにタイトルとして表示されます。
(10) タイトルを入力して[次へ >]をクリック
スタートメニューのグループ構成を指定する画面になります。[新しいグループ]ボタンや[新しい項目]ボタンをクリックすればグループと項目が作成でき、[プロパティ]でグループや項目の名前を変更できます。
(11) グループと項目を指定し、[次へ >]をクリック
各ファイルのセットアップ先(コピー先)が一覧表示されます。データファイルなどはコピー先を変更したい場合がありますが、ここでは設定を変更できません。後で設定を修正するので、ひとまず次へ進みます。
(12) セットアップ先を確認して[次へ >]をクリック
インストールするファイル群の中から「共有ファイル」を指定します。共有ファイルに指定したファイルは、アプリケーションをアンインストールするときに「共有ファイル」であることがユーザーに示されます。
ランタイムファイルやデータベース用のDLLファイルなど、他のアプリケーションでも利用されそうなファイルを指定しておきます。
(13) 共有ファイルを指定して[次へ >]をクリック
ここまでの作業をスクリプトとして保存し、何度でも実行できます。「スクリプト名(S):」に、この配布パッケージの設定を示す名前を入力し、[完了]をクリックします。


- 配布パッケージの完成 -

これで「作業中」のウィンドウが表示され、しばらくすると指定したフォルダに配布パッケージが生成されます。
最後にパッケージ生成過程の情報が表示されるので、[レポートの保存]をクリックして保存しておくとよいでしょう。後々の修正に役立ちます。
[閉じる]をクリックしてレポートの画面を閉じ、さらにディストリビューション・ウィザードの[閉じる]をクリックすれば、指定したフォルダにsetup.exeとcabファイルなどが生成されています。
フォルダ内には“Support”というフォルダも生成されています。これは配布パッケージ生成用の情報などを保存するフォルダなので、ユーザーに配布する必要はありません。クライアントへのインストールでは、Supportフォルダ以外のファイルを使用します。


- 設定ファイルの修正 -

基本的には、ここまでの作業で配布パッケージの生成は完了です。しかし業務アプリケーションの場合、データベースファイルや特別な設定用ファイルなど、exeファイルやその他のシステムファイルとは異なるフォルダに保存しなければならないファイルが、存在する場合もあります。
例えば、第30回で紹介したネットワーク・アプリケーションでは、共有データファイルの保存場所を指定するテキストファイル(第30回の例では“Hanbai.cfg”)を、“My Documents”フォルダにコピーするようにしていました。
ディストリビューション・ウィザードでは、こういった付加的なファイルは、exeファイルと同じフォルダにインストールされてしまいます。ファイルのコピー先を変更するなど独自の設定は、インストール情報を記録した“Setup.lzt”を修正して行います。


- “Setup.lst”を書き直す -

“Setup.lst”テキストファイルなので、エディタに読み込んで自由に修正できます。この中の[Setup1 Files]という記述の下に

File1=@VBzaiko.cfg,$(AppPath),,,
3/20/01 4:03:59 PM,26,0.0.0.0

といった行があるはずです。アンダーラインの箇所にコピーされるファイル名が記述されているので、コピー先を変更したいファイルを探し、その後ろの

$(AppPath)

の部分を書き換えれば、コピー先のフォルダを変更できます。“My Documents”フォルダにコピーしたいなら

File1=@VBzaiko.cfg,C:\My Documents,,,
3/20/01 4:03:59 PM,26,0.0.0.0

のようにします。
他の箇所を書き換えるとインストールが失敗することもあるので、書き換えには十分注意しましょう。書き換えたら、ファイルを保存します。

リスト3:インストールの動作を指定するSetup.lstの内容(一部)


- アプリケーションのインストール作業 -

生成された配布パッケージ(インストール用ファイル群)をクライアントマシンにコピーし、その中のSetup.exeを実行すると画面8のようになります。[OK]をクリックすれば画面9のようになります。一般的なアプリケーションのインストーラと同じで、ユーザーはインストール先の変更なども行えます。
インストール後は、コントロールパネルの「アプリケーションの追加と削除」からアンインストールもできます。

画面8:Setup.exeを実行し、インストールが開始された
画面9:インストール先の変更もできる


- コピー先を指定するマクロ -

ディストリビューション・ウィザードのセットアップ先指定で使用される$(AppPath)などの記号は、どのような実行環境でも共通のフォルダを指定できるようにするためのマクロです。
同じ記号が、生成されたSetup.lstの[Setup1 Files]の箇所でも用いられるので、Setup.lstのこの箇所を書き換えれば、特定のファイルを異なるフォルダにコピーさせることができます。マクロと実際のコピー先は、表1のようになっています。
また、このマクロの代わりに直接パスを指定すれば、指定したパスにファイルをコピーできます。

表1:ディストリビューション・ウィザードで用いられるパス指定用マクロ



Visual Studio Installer

Visual Studioの登録ユーザーには、マイクロソフト社から“Visual Studio Installer 1.1”が無償配布されています。これは、Windows 2000に対応したインストーラを生成するアドインで、VBではなくVisual StudioのEnterpriseツールから実行します。
VBアドインのディストリビューション・ウィザードに比べ、ユーザーインターフェイス、レジストリの設定、ファイルの関連付け、ディレクトリの指定など非常に詳細に制御できるようになっています。
半面、設定項目が多いためディストリビューション・ウィザードに比べて手間がかかることも事実です。様々な実行環境に対応した市販アプリケーションの場合は便利ですが、VBで作成した一般的な業務アプリケーションの場合、インストール先の実行環境がほぼ統一されている場合が多いため、ここまで詳細な設定を必要とすることはあまりないでしょう。

画面10:レジストリなど詳細な設定ができる


DownloadVBプロジェクトファイル
のダウンロード(Ex33.LZH)

(LZH形式 9.06KB)
Copyright © MESCIUS inc. All rights reserved.