現在作成中のソフトのインストーラーを何にしようか悩んでいたところ・・・
「インストーラーを作るなら、Tomcatのインストーラーに使われている、NSISっていうのがあるよ。」
というアドバイスをもらったので、NSISでWindows Vista用のインストーラーを作成してみることにしました。
NSISは、”nullsoft scriptable install system” の略で、Apache Tomcatだけでなく、いろいろなソフトに採用されているオープンソースのフリーなインストーラーです。
こちらのサイトを参考に、HM NIS Edit というフロントエンドを使用して簡単なインストーラーを作成してみました。
インストーラーを作成する際にちょっとつまずいてしまったところがあったので、まとめておこうと思います。(※今回ダウンロードしたNSISのバージョンは、2.45、HM NIS Edit のバージョンは、2.0.3です。)
1.アンインストールしてもスタートメニューからショートカットが削除されない。
HM NIS Editのスクリプトウィザードで、「アンインストーラーを使う」にチェックを入れると、インストーラーと一緒にアンインストーラーも作成されます。
このアンインストーラーを利用してソフトをアンインストールしたところ、スタートメニューのショートカットが削除されませんでした。
調べてみると、NSISのFAQに答えが載っていました。どうやらVista固有の問題のようです。
Windowsの管理者権限でショートカットを作成・削除するか、全てのユーザのスタートメニューにショートカットを作成・削除すればよいようです。
2. インストール完了時に表示される「Readme を表示する」が文字化けする。
インストール完了時によく表示されるチェックボックス、「Readme を表示する」の表示が、なぜか「Readme を表¥示する」と、文字化けして?表示されてしまいました。
NSISに含まれる言語ファイルを確認してみましたが、特に問題はなさそうです。
いろいろ悩みましたが、今回は、「Readmeを表示するチェックボックスに表示する文字」を変更することによって解決しました。
!define MUI_FINISHPAGE_RUN "$INSTDIR\プログラムexe" !define MUI_FINISHPAGE_SHOWREADME "$INSTDIR\readme.txt" !define MUI_FINISHPAGE_RUN_TEXT "今すぐプログラムを起動する" !define MUI_FINISHPAGE_SHOWREADME_TEXT "readme.txt を表示する" !insertmacro MUI_PAGE_FINISH
MUI_FINISHPAGE_SHOWREADME_TEXTのテキストを変更します。
ちなみに、プログラムを起動するチェックボックスのテキストは、MUI_FINISHPAGE_RUN_TEXを変更すればよいようです。
3. アンインストールするときもインストールと同じようなウィザードを表示したい。
HM NIS Editのスクリプトウィザードでアンインストーラーを作成すると、アンインストール時に、アンインストールの開始(~とコンポーネントを削除してもよろしいでしょうか?)と完了(~はこのコンピュータから完全に削除されました。)を知らせるダイアログボックスが表示されます。
これを、インストールのときと同じようなウィザードを表示するように変更してみました。
; Uninstaller pages !insertmacro MUI_UNPAGE_WELCOME !insertmacro MUI_UNPAGE_INSTFILES !insertmacro MUI_UNPAGE_FINISH (中略) ;Function un.onUninstSuccess ; HideWindow ; MessageBox MB_ICONINFORMATION|MB_OK "$(^Name)はこのコンピュータから完全に削除されました。" ;FunctionEnd ;Function un.onInit ; MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "$(^Name)とコンポーネントを削除してもよろしいでしょうか?" IDYES +2 ; Abort ;FunctionEnd
MUI_UNPAGE_WELCOMEとMUI_UNPAGE_FINISHというパラメータを指定して!insertmacroでマクロを挿入しています。
今回は簡単なインストーラーを作成しましたが、NSISのドキュメントやたくさんのサンプルを見ると、他にもいろいろなことができそうです。
日本語のまとまった情報が少ないので、英語のあまり得意でない私にはちょっぴり骨が折れそうです。