自分が作成したプログラム類を社内・社外問わず配布する場合ZIPで固めただけで配布するのは、よくありますがやはり、インストーラを作ってインストール、登録、ショートカットの作成まで作って上げると親切です。

社内で配布する場合それだけでなく、インストール先を固定化したり(アップデータを作る時に決め打ちできるため)、また管理者権限の制限等を回避する為に、インストール先をドキュメントフォルダ等にするなど、色々と作り手にとっても後のメンテナンスを考えるとメリットがあるため、積極的に作るようにしています(このサイトで配布する時はZIPで固めてが多いですが・・・)

今回はAccessのプログラム群Electronのプログラム群を配布でよく使ってる2つのインストーラについてノウハウを紹介したいと思います。

難易度:

今回使用するプログラム

※今回はEXEPressについては無償で利用できるLite版を使います。

※Accessは2010まではパッケージソリューションウィザードでインストーラ(Runtime含めて配布が可能)があったのですが、2013から廃止されてしまったので、故にAccessファイルを効率よく配布するには、今回のようなインストーラで作って上げる必要があります。

EXEPress

結構な昔から存在していて、フリーソフトの配布などでもよく利用されているのがこのEXEPress。設定をポチポチ弄るだけで手軽にインストーラが作れるので、非常に便利です。自分はメインをInno Setupを使っていますが、アップデータなどの差分を配布する場合にはEXEPressを利用しています。

図:EXEPressのメイン画面

事前準備

EXEPressは事前にファイル群はCAB形式で圧縮しておいたファイルを元にインストーラを作ります。この時注意したいのが、ファイル群を圧縮する場合に

  • ファイル群が入ったフォルダをCABで圧縮しない(インストールした時にインストール先にそのフォルダが作られた上でその中に解凍されてしまう)
  • ショートカットなどで使うアイコン類もファイル群に含めておく
  • インストールはしないけれど、インストール後に実行するファイルがあれば含めておく(VBSのスクリプトなど)
  • ソフトウェア使用許諾などを表示したい場合、readme.txtなどを作って含めておく

圧縮していざインストーラ作ろうと思ったら、ファイル足りなかったなんて事が結構しばしばあります。EXEPress上から書庫を作る機能はあるのですが、事前に含めておくといった事は同じくしておく必要があるので、要注意です。

詳細設定

インストーラの様々な制限やオプションを付け加えるこのプログラムの肝になる部分です。Lite版の場合利用できる機能に制限があります。会社やフル機能を使ってインストーラを整備したい場合には有償版を購入しましょう。

起動前の処理

主に権限に関する項目を設定します。注意すべきは

  1. Program Filesなどのフォルダにインストールする場合は管理者権限が必要です
  2. 管理者権限でのインストールが制限されてる社内PCの場合は、権限を付けず、Documentsフォルダ以下などにインストールするようにする
  3. 実行できるOSのバージョン制限で、対象外のOSを除外する事が可能です。

図:社内で配布する時は気を使う必要がある設定

プログラム

この設定も前項同様、権限に係る部分が主となります。注意すべきは

  1. 32bit OSではインストールさせないよう、プログラムタイプの設定が可能です。
  2. アプリケーションマニフェストで管理者権限への昇格に関して、管理者権限でないと困るケース出ないのなら、昇格を必要としない設定にすると良いです。
  3. 有償版では、OSの細かなバージョンチェックを行ってインストール対象とするような高度な設定変更が可能です。

AccessもVBA内で64bitモジュールを使ってるようなケースでは、コードを分けて書くよりも、割り切って64bit専用で書いたほうが、これから先は楽なので、用途によりけりですが、bit指定は重要です。

図:ここも同様に管理者権限昇格に注意

デザイン

インストーラの細かなデザインを変更出来ますが、有償版出ないと出来ません。ウィザードパネルの画像や右上のアイコン画像の変更などを独自のものに変更可能です。アプリの独自性を出したい場合には、変えたい所ですね。意外とこういう所をこだわっていると、社内配布でもユーザの人との心の距離が縮まったりします(猫の素敵な画像にしてみたり)

デザイン用BMPは事前にCABに含めておく必要があります

図:クラシックスタイルなウィザード画面にもできます

アイコン

ここも、前項同様有償版だとカスタムなアイコンを使う事が可能になります。分かりやすいアイコンにしておくと良いです。説明する時に、「◯◯のアイコンをダブルクリックして」など伝わりやすくなるので、猫のアイコンなどがおすすめです。

図:個人的にはインストーラアイコンはこだわる派です

バナー

こちらも、インストーラのデザイン関係ですね。BMP形式のバナーを表示可能です。バナーにハイパーリンクを設定し、自分のホームページへ誘導することも可能です。自分はあまりここはいじらないです。

バナーのBMPファイルは事前にCABに含めておく必要があります

図:バナー表示はお好みで

背景

インストーラの背景を設定する部分。デフォルトだと青い背景のよくある背景になります。これでは味気ないので、例えば海の風景などや、アプリに関係ある風景をセットしておくとインストール作業も楽しくなります。

背景画像のBMPは事前にCABに含めておく必要があります

説明

アプリケーションの例えば改訂履歴や使用するにあたっての使用許諾などを事前に表示し、見終わるとインストールできるようにすることが可能です。事前にtxtファイルを用意しておく必要があります。

また説明用のテキストは事前にCABに含めておく必要があります。使用許諾や最後まで読んだら進める機能は有償版で可能です。

図:自分はプログラム本体に改訂履歴のせる派です

解凍

このプログラムの詳細設定で最も重要な設定箇所です。主に

  1. インストール先を固定化するか?ユーザにまかせるか?
  2. 固定化する場合はどこのフォルダの直下にし、フォルダ名はどうするか?
  3. 既にファイルがある場合、更新日付を持って上書きするかしないか?
  4. インストール先フォルダをレジストリに記録しておくか?

など。自分の場合、社内配布ではマイドキュメント直下にプログラム名で固定化してます。また、プログラム自体の設定ファイルを上書きしてしまうのはマズイので、CABファイルにそれらは含めないで最低限のファイルのみだけでパッケージを作ってます(プログラム側でも設定ファイルが無い場合には自動でつくるように仕込んだりします)

そういった要件に合わせて、どの条件がベストか作り手側の都合で設定する箇所になります。

図:作り手側の条件に合わせて設定します

ショートカットの登録

ここはインストール後の対象のファイル(exeやaccdbなど)へのショートカットを作成する設定です。但し、管理者権限が無い場合スタートメニューに登録が出来ない場合があります。また現在はクイック起動のツールバーはWindows10には存在しないので、標準ユーザの場合はデスクトップに作るだけになります。

CAB内のどのファイルに対してショートカットを作るかを指定します(複数指定可能)。グループはスタートメニューのグループになります。全ユーザ共通のショートカットを作る場合、管理者権限設定が必要になります。

図:インストール権限によって出来る事が変わります。

アンインストーラ

コントロールパネルのプログラムと機能からアンインストール出来るようにする為の機能です。登録が無い場合には手動でユーザがフォルダ毎捨てる作業が必要になるため、使わなくなった場合フォルダにそのままになったり、ユーザが捨てたくてもどこにファイルが有るのかわからないといったトラブルを防げます。

ただし、この機能を使うには起動前の処理でPowerUser権限以上がEXEPressの場合必要になる為、社内配布では使えない可能性があります。そういう事もあって、自分はEXEPressで作る場合は、アンインストーラ設定をせず、アップデータ目的で使っている理由になります(InnoSetupはユーザ権限で登録が可能)

細かくインストール後に作られたファイルの削除やレジストリキーなどの設定などが可能です。

図:アンインストーラ設定はとっても大切

自動実行

多くのケースでは使わないとは思いますが、業務用アプリだと意外と使うシーンがあるのが、この自動実行。例えばAccessならばインストール後に同梱しておいたAccess Runtimeのインストーラを実行させるであったり、VBSのスクリプトファイルを仕込んでおいて、業務用アプリの各種設定をVBSで事前にやらせるといった事が可能になります。

AccessのVBA側で起動時に設定を仕込むケースは多いですが、初回起動時は設定が当然無いので事前にレジストリにキーを作っておきたい場合などは、こういったロジックが非常に有効になります。

自動実行で別途必要になるプログラムやスクリプトファイルは事前にCABファイルに含めておく必要があります。

図:地味に重要な機能です

特殊処理

プログラムによっては、インストール先ではなく例えばSystemフォルダにインストールが必要なファイルや、OCXのようにレジストリ登録の必要なファイルを指定して、インストール時に処理をしてくれる機能です。

自分も7-zipのDLLをユーザのシステムフォルダにインストール必要なケースで使います(社内だとインストール出来ないので、VBA側でカレントディレクトリのDLLを拾うようにしていますが)。独自OCXなどは登録していないとVBAからも参照が出来ないので、そういったファイルのregsvr登録をインストーラがやってくれる便利な機能です。

もちろん対象のファイルは事前にCABに含めておく必要があります。

図:DLLだけ別フォルダにインストールなどで使う

設定の保存

作ったインストーラの設定は保存しておけば、次回以降再度インストーラを作る必要が出た場合に流用する事が可能です。起動直後の画面で設定読込で、保存しておいた設定ファイルを読み込めば、前項の詳細設定で決めておいた内容を再設定せず使えます。また、変更したら設定保存で、所定のフォルダにiniファイル形式で保存しておく事が可能です。

後は作成ボタンをクリックすれば、EXE形式のインストーラファイルが生成されます。

Inno Setup

概要

オープンソースで作られていて、非常に多彩な事が実現できる素晴らしいインストーラです。ただしEXEPressのように設定画面をポチポチいじれば作れるというようなものではなく、インストールスクリプトを書いて構築するので、ちょっとハードルが高目です。しかし、基本さえ押さえればそこまで難易度の高いものではないので(VBSのようにコードを書くわけじゃないので)、恐れずにチャレンジし、少しずつ機能を増やしていけば、自分なりのインストーラを構築可能です。

※インストーラ内で色々条件分岐をさせたい場合はスクリプトを書くことも可能です(言語はPascalになります)

今回は自分が普段使ってるスクリプトを例に解説してゆきたいと思います。インストーラ自体は日本語対応ですが、Inno Setup自体は英語UIなので抵抗感ある人がいるかもしれませんが、あのメニューは一部しか使う機会が無いので気にする必要は殆どありません。

ユーザ権限でプログラムと機能にアンインストーラとしても登録が可能です

図:テキストエディタのような作成画面

図:自分が作ったインストーラの起動画面

よく使ってる設定スクリプト

スクリプトの解説

Setupセクション

インストーラの様々な情報を記述する最も基本的なセクションです。セットアップスクリプトの殆どを占めています。

AppId

アプリケーション固有のGUIDを指定しなければなりません。これは自分だけではなく他のアプリともかぶらないようにという事なので、ランダムな特定の文字列なのですが、自分で考えるのは大変なので、以下の手順で生成可能です。

  1. InnoSetupのメニューよりtools⇒Generate GUIDをクリック
  2. ダイアログが出てくるので、はいを選択する
  3. GUIDが生成されるので、これをAppIdに当てはめます
AppName

アプリケーションのフルネームを指定します。インストーラ上での表記で使用しています。

AppVersion

アプリケーションのバージョンを指定します。インストーラ上での表記だけでなく、コントロールパネルのプログラムと機能でも表記として登録される内容になります。毎回作る時はバージョン変更をするように注意が必要です。

図:このように登録されます

AppVerName

アプリケーションの名称ですが、コントロールパネルのプログラムと機能で表記として登録される内容になります。Versionは含めなくても良いのですが、慣習として自分は含めるようにしています。

AppPublisher

製作者の名前や企業名を登録します。コントロールパネルのプログラムと機能で表記として登録される内容になります。

DefaultDirName

既定のインストール先を指定します。

  • {userdocs}で、ユーザのドキュメントフォルダの指定になります。
  • つなげて、サブディレクトリ名をつけてインストール先として自分の場合指定しています。フルパス指定も可能
  • ユーザが指定、もしくはここで指定されたディレクトリが後半の{app}のディレクトリになります。
  • {pf}を指定するとProgram Filesになります
  • インストールディレクトリを常に同じにする場合には、UsePreviousAppDirを項目として追加してnoを指定します

{userdocs}を使いたくない場合、{commonappdata}を指定することで、ドキュメントフォルダではなく、c:\Users\[ユーザー名]\AppData\Roaming以下にインストールするようになります。ユーザ権限でインストールするChromeなどもこちらのフォルダにインストールしていますね。ちなみに、{win}でWindowsフォルダの指定、{fonts}でフォントフォルダの指定になります。

DisableDirPage

インストール先をユーザに選ばせない場合には、この項目を追加してyesを指定します。

DefaultGroupName

スタートメニューなどで登録する場合のプログラムグルーム名です。

OutputDir

作成したインストーラを出力するディレクトリのパスを指定します。自分はデスクトップに生成しています。

OutputBaseFilename

作成したインストーラのファイル名を指定します

SetupIconFile

インストーラのアイコンを指定します。フルパスでico形式のファイルを指定します。

Compression

Filesセクションで指定したファイル群を圧縮する歳の圧縮形式です。通常はlzmaのままでOKです。

PrivilegesRequired

重要な設定項目でnoneを指定するとユーザ権限でのインストールになります。これがadminの場合には管理者権限でのインストールとなります。adminを指定した場合、RUNセクションでのEXEなどを実行する場合にも、Flags: runascurrentuserの追記が必要になります。

WizardImageFile

インストーラの起動時に左側に出てくる画像を指定できます。縦長ファイルを指定する必要があります。WizardImageStretchをNoで指定するとストレッチせずに表示してくれます。

図:猫の画像は人気高いです

WizardSmallImageFile

インストーラの右上にあるアイコンを変更できます。

図:アイコン1つでも重要なファクターです

DisableWelcomePage

これを指定すると、インストーラのようこそ画面を省略できます。自分は常に必要ないと思ってるので、指定しています。

UsePreviousAppDir

今回は使用していませんが、インストールを行う時にユーザが以前インストールしたディレクトリをデフォルトディレクトリとして表示するかしないかの設定です。インストール先固定であったり、常にインストール先のデフォルトディレクトリは定位置を表示したい場合には、noを指定しましょう。

ChangesAssociations

今回は使用していませんが、特定の拡張子の関連付けを変更したい場合にはyesを指定します。後述のTasksセクションやRegistryセクションにも追加の記述が必要になります。

Languageセクション

インストーラで使う言語を指定します。日本語ならばサンプルにあるように「Name: “japanese”; MessagesFile: “compiler:Languages\Japanese.isl”」を指定すれば良いだけ。指定しないと英語表記になってしまうので必ず指定しましょう。デフォルトで言語ファイルが複数同梱されているので、主要な言語用にインストーラを簡単に作り変える事が可能です。

多言語対応させたい場合には、複数指定を追加するだけでOKです。

Tasksセクション

インストーラ側でマシン内で色々作業をやらせる場合に記述するセクションですが、自分の場合ショートカットの作成でだけ使っています。他にはファイルとプログラムの関連付けなどでも使われています。

  • Nameでdesktopiconを指定する事で、デスクトップにショートカットを作ります
  • desktopicon\commonを指定すると全ユーザ共通となります
  • Flags: uncheckedを同じ行に加えることで、自動ではショートカットを作らなくなります(ユーザが指定したら作成するようになります)

今回は使用していませんが、ファイル関連付けをしたい場合には、このセクションにてName: association;を追記します(後述のRUNセクションに追記が必要です)

Filesセクション

インストーラに含めるファイルを指定するセクションです。細かく1個ずつファイルをどこにインストールするかを指定することも可能です。かなり細かなインストール支持を出す事が可能でオプションが豊富です。

  • Sourceの項目にフルパスでファイルを記述するか?フォルダに*を加えてワイルドカード指定で、そのフォルダ内のファイル全部といった大雑把な指定も可能です。
  • 但し、通常は1個ずつ丁寧にフルパスでファイルを指定するべきです。開発途中の残骸や含まれてはマズイ資料まで含まれてしまう事を防ぐためにも。
  • DestDir項目がインストール先指定です。{app}が指定されていますが、これはインストール先として指定された標準のフォルダを意味しています。{sys}を指定すると、Systemフォルダの指定になります。
  • {app}/サブディレクトリ名を指定すると、{app}内のサブディレクトリにインストールといった指定も可能です
  • Flags: onlyifdoesntexistを追記すると、ファイルが無い場合にインストールといった指定になります
  • Flags: recursesubdirsを指定すると、サブディレクトリまで含めてファイル全部を対象といった指示になります。Sourceでワイルドカード指定してる場合、このフラグが無いとサブフォルダの内容は無視されてしまうので合わせてセットしておきたい

ignoreversionをflagsに指定してる場合、対象のファイルのバージョンが同じ場合でも強制上書きになります。

Iconsセクション

ショートカットを作った場合に、そのショートカットがどのファイルとリンクしてるか?またその時のアイコンを指定する項目です。

  • Name: “{userdesktop}\\Box Sync”で、デスクトップにBox Syncというショートカットを作ります
  • Filename: “{app}\boxman.exe”で、インストールしたディレクトリ無いのBoxman.exeへのリンクする指示になります
  • IconFilename: “{app}\resources\app\img\naruto.ico”で、インストールディレクトリ内の相対ディレクトリにあるnaruto.icoをアイコンとして使うように指示しています
  • DLLに複数含まれてるアイコンを指定したい場合には、IconFilename: “shell32.dll”; IconIndex: 12といった様にiconindexで指定が可能です。

Runセクション

インストール後に自動実行する項目を指定する場所です。今回はプログラム本体のaccdbファイルを開くようにしていますが、Flagsでskipifsilentを指定してるので、ユーザの指示なく自動で実行します。

主にインストール後にプログラムを起動するだけでなく、vbsスクリプトなどを指定して設定関係の処理をそちらにやらせるようなケースで利用します。Inno SetupでもRegistryセクションでレジストリの操作などができますが、インストール後の処理に関してはあえて、Inno Setupでなくともできますし、VBSのほうが柔軟に色々操作が可能なので、自分はVBSを指定することが多いです。

ファイルの関連付けをしたい場合には、Tasks: association;を追記する必要があります。

例:[Run] Filename: “{app}\roumu.exe”; Parameters: “0”; Tasks: association; Flags: nowait skipifsilent

関連リンク

共有してみる: