今回はNSISを利用し、Windows用のインストーラーを作成します(注:この連載ではUbuntuを扱っています)。
NSISとは
NSISは、Winampで有名なNullsoftが開発している、スクリプトベースのWindows用インストーラー作成ソフトです。簡単に済ませたい場合はとことん簡単にできますし、手間をかければ凝ったこともできるので、いろいろなソフトウェアで使われています。
今回は、普通のインストーラーとレジストリを変更するだけのツールを作成してみます。
正直なところNullsoftの現状はよくわからないのですが、NSISはオリジナルメンバーによって現在も細々と開発が継続しており、執筆段階での最新版 (2.50/3.0b3) が2015年12月26日にリリースされています。
UbuntuとNSIS
NSISはオープンソースライセンスで提供されています。そして、NSISそのものはWindowsでなくても動作します。実はUbuntuのリポジトリにもありますので、簡単にインストールできます。そして、実行してWindows用インストーラーを作成することもできます。しかし、言うまでもありませんがテストというかインストーラーを実行することはできません。もちろんWineがインストールされていればインストーラーの実行自体は可能です。
それ以前にUbuntuでNSISを使用するメリットを明確に説明せよと言われると、正直すごく困ってしまいます。あえて言えばapt一発でダウンロードできること、他のコマンドと組み合わせ、例えばインストールするファイルをwgetやcurlで取得してそれを展開するといったことを簡単に書けるというメリットはありますが、Cygwinを使用すればWindowsでも同様になるはずなので(未検証)、メリットと言えるほどのものはありません。
サンプルスクリプトその1:画像インストーラー
まず簡単なサンプルとして、画像ファイルをWindows XPだと「マイ ピクチャ」フォルダー、Windows 7/10だと「ピクチャ」フォルダーにインストールするインストーラーを作成してみます。
以下のコードをファイル名"image-installer.nsi"、文字コードをSHIFT_JISで保存してください(そのまま保存すればSHIFT_JISになっています)。geditでもSHIFT_JISでの保存は可能です。改行コードはLFでもCR+LFでもどちらでも構いません。
次のコマンドを実行して、インストーラーを作成します。
今回のコードはサンプルスクリプトに多少の手を加えたものです。コメントも多いのでわかりやすいと思いますが、ポイントとなる部分をいくつか解説します。
ここではModern UI 2.0を使用しています。これは日本語にも対応しています。今回は紹介しませんがいろいろカスタマイズもできるので、よほどの理由がない限りはこのフォントを使用するのがいいでしょう。
インストーラーの名前と実行ファイル名とインストールフォルダーを指定しています。インストールフォルダーは前述のとおりWindowsのバージョンにより異なっているため、このような定数を使用しています。他の定数に関しては、マニュアルに記載がありますので参考にしてください。
サンプルスクリプトではコメントアウトにしていますが、このように書けば独自のアイコンを使用できます。なお、ico形式へのエクスポートはGIMPでも可能です。エクスポート時に拡張子を"ico"にしてください。
なお、実際に作成したインストーラーは、このアイコンに差し替えています。
インストール/アンインストール時に行うことを指定しています。上からようこそ画面、フォルダーの指定、実際のインストール(ファイルのコピー)/アンインストール、完了しました画面の4つを行います。今回はインストールフォルダーを指定する意味はないので、削ってもいいかもしれません。
インストーラーの言語は日本語にしたいので、このように指定しています。
重要なのは"File"行で、実際にインストールするファイルを指定しています。この指定方法だと、"image-installer.nsi"と同じフォルダーに置く必要があります。
アンインストールで重要なのは"Delete"行で、アンインストールするファイルを一つひとつ指定しています。今回はアンインストール実行プログラムも画像ファイルと同じ場所に置いてるので、ややダサいです。しかし、ユーザー権限でインストールしている以上、やむを得ない部分でもあります。
コメントも含めて100行にも満たないスクリプトですが、Wineでインストールしてみると、以下のように本格的なインストーラーとなります。なお、Wineは気が効いており、画像ファイルは"XDG_PICTURES_DIR"にインストールされます。すなわち日本語でインストールした場合は"$HOME/画像"フォルダーにインストールされます。
サンプルスクリプトその2:レジストリ変更ツール
WindowsでNATトラバーサルを有効にするためには、レジストリを変更する必要があります。Windows 10でも同様というのはいかがなものかと思うわけですが、それはさておきWindowsでVPNを使用したい場合は必須の変更といえます。しかし、レジストリの変更など手動では行いたくありません。NSISは当然のことながらレジストリの変更もできるので、使わない手はないでしょう。
ということで次のサンプルはレジストリの変更ツールです。以下のコードをファイル名"nat-t_reg.nsi"、文字コードをSHIFT_JISで保存してください(そのまま保存すればSHIFT_JISになっています)。
次のコマンドを実行して、インストーラーを作成します。
コードをいくつか解説します。
今回はAdministrator権限が必要なため、"RequestExecutionLevel"は"admin"にしてあります。
注意を追加するため、このようにしました。
ここもサンプルコードを参考にしているのですが、まずはエラーフラグを初期化して、該当のレジストリ部分を読み取って変数"$0"に入れます。エラーが返ってくる場合、すなわち値が何もない場合は作成し、値を"2"にします。存在していても値が空の場合はやはり"2"にします。何かしら値がある場合は何もしません。いずれの場合も、ダイアログでメッセージを表示します。
Ubuntu上では何の効果もありませんが、このプログラムもWineで動作することを確認しました。