【NSIS】Windows向けインストーラーの作成方法:Modern UIを使用

時計 2020.04.29 / 時計

【NSIS】Windows向けインストーラーの作成方法:Modern UIを使用

本記事ではNullsoft Scriptable Install System(以下NSIS)を使ったWindows用のインストーラー作成方法を解説します。

インストーラー作成用のツールはたくさんありますが、本記事はフリーソフトウェアのインストーラーNSISを使用します。

NSISのインストールがまだの方は下記リンクよりNSISをインストールしてください。

私はPythonで作成したexeファイル及び関係する画像やファイルの配布用にインストーラーを作成しております。
ですが、もちろんPython以外の言語で書かれたプログラム用のインストーラー作成にもNSISは使用できますのでご安心ください。

本記事執筆時のNSISのバージョンは3.05、OSはWindows10 64bit 1909です。

インストーラー作成のためのNSISのスクリプトnsiファイルの書き方を詳しく解説します。

スクリプトnsiファイルの作成

まずは好きな場所に拡張子がnsiのファイルを作成します。私は毎回Install.nsiというファイル名で作成しています。

この時に重要なポイントとして、文字コードはShift-JISで保存してください。

作成したnsiファイルがNSISで作成するインストーラーの設定ファイルです。

このファイルにどのファイルをインストーラーに組み込むのか、アプリケーション名、インストーラー起動後のウィンドウについてなど様々な設定を書き込みます。

ソースコード

以下に必要な機能を組み込んだnsiファイルのソースコードを記します。


# Modern UIをインクルードする
!include MUI2.nsh

# アプリケーション名
Name "office54"

# 作成するインストーラー名
OutFile "office54_Installer.exe"

# インストール先のディレクトリ
InstallDir "$LOCALAPPDATA\Programs\office54"

# インストーラーページ
!insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_PAGE_LICENSE license-japanese.txt
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH

# アンインストーラ ページ
!insertmacro MUI_UNPAGE_WELCOME
!insertmacro MUI_UNPAGE_CONFIRM
!insertmacro MUI_UNPAGE_INSTFILES
!insertmacro MUI_UNPAGE_FINISH

# 日本語UI
!insertmacro MUI_LANGUAGE "Japanese"

# インターフェース 設定
!define MUI_ABORTWARNING

# セクション
Section
  # 出力先を指定
  SetOutPath "$INSTDIR"
  # インストーラーに組み込むファイル群
  File "C:\NSIS\office54.exe"

  # アンインストーラを出力
  WriteUninstaller "$INSTDIR\Uninstall.exe"
  # スタート メニューにショートカットを登録
  CreateDirectory "$SMPROGRAMS\office54"
  SetOutPath "$INSTDIR"
  # デスクトップにショートカットを作成
  CreateShortcut "$SMPROGRAMS\office54\office54.lnk" "$INSTDIR\office54.exe" ""
  CreateShortcut "$DESKTOP\office54.lnk" "$INSTDIR\office54.exe" ""
  # レジストリに登録
  WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\office54" "DisplayName" "office54"
  WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\office54" "UninstallString" '"$INSTDIR\Uninstall.exe"'
SectionEnd

# アンインストーラ
Section "Uninstall"
  # アンインストーラを削除
  Delete "$INSTDIR\Uninstall.exe"
  # ファイルを削除
  Delete "$INSTDIR\office54.exe"
  # ディレクトリを削除
  RMDir /r "$INSTDIR"
  # スタート メニューから削除
  Delete "$SMPROGRAMS\office54\office54.lnk"
  Delete "$DESKTOP\office54.lnk"
  RMDir "$SMPROGRAMS\office54"
  # レジストリ キーを削除
  DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\office54"
SectionEnd

これを先ほど作成したnsiファイルにコピーし、インストーラーに組み込むファイルのパスを変更すれば基本的に問題なく動くはずです。

次からはソースコードに記載されているコードについて詳しく解説していきます。

Modern UIの設定

NSISでよく使われているModern UIを今回は使用しています。

古臭くない現代的なインストーラーの画面を表示するようになります。

Modern UIに設定する場合は以下コードを加えます。

!include MUI2.nsh

Moden UIのこの設定は必ずスクリプトファイル(nsiファイル)の先頭に書いてください。

インストーラーページのカスタマイズ

インストーラーの起動後に表示されるページ(画面)をカスタマイズできます。

# インストーラーページ
!insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_PAGE_LICENSE license-japanese.txt
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH

# アンインストーラページ
!insertmacro MUI_UNPAGE_WELCOME
!insertmacro MUI_UNPAGE_CONFIRM
!insertmacro MUI_UNPAGE_INSTFILES
!insertmacro MUI_UNPAGE_FINISH

インストーラーの画面構成だけでなく、アンインストーラーの画面構成もカスタマイズ可能です。

書き方は!insertmacroの後に表示したいインストーラーページを書きます。ページはスクリプトに書いた順番で出てきます。

上記ソースコードではウェルカムページ、ライセンスページ、ディレクトリページ(ファイルの保存先を指定できるページ)、インストールページ、終了ページの順番です。

ソースコードからMUI_PAGE_の後に表示したいページを記載すればいいことがわかりますね。

ではインストーラーを実際に起動するとどういったページが表示されるのかを以下に記します。

NSISのインストールウィザード:Welcomeページ
ウェルカム ページ

NSISのインストールウィザード:Licenseページ
ライセンス ページ

NSISのインストールウィザード:Locationページ
ディレクトリ ページ

NSISのインストールウィザード:Finishページ
インストール完了 ページ

ソースコード内ではライセンスページは以下のようにページを組み込まれています。

!insertmacro MUI_PAGE_LICENSE license-japanese.txt

これはライセンスページを組み込むという意味だけでなく、ライセンスページで表示される契約書の内容をlicense-japanese.txtから持ってくることも指定しています。

ここで指定するテキストファイルはnsiファイルと同じ階層に保存してください。

アンインストールのページはMUI_UNPAGE_に続けてページ名を記載します。

インストールするファイルとフォルダの指定

スクリプトのSection内にインストーラーによってダウンロードされるファイル群を指定できます。

# セクション
Section
  # 出力先を指定
  SetOutPath "$INSTDIR"
  # インストーラーに組み込むファイル群
  File "C:\NSIS\office54.exe"

Fileの後にインストールするファイルの絶対パスを記入します。

ここではPythonでexe化したファイルを指定しています。

Pythonファイルのexe化は下記リンクをご参照ください。

インストールするのがフォルダの場合は下記のように記入します。

FILE File /r フォルダ名

上記の場合は、nsiファイルと同じ階層にフォルダが入っている想定です。

インストール先はSetOutPathで指定します。$INSTDIRはInstallDirで指定したパスを指しています。

# インストール先のディレクトリ
InstallDir "$LOCALAPPDATA\Programs\office54"

日本語の指定

以下のコードで日本語を指定します。

# 日本語UI
!insertmacro MUI_LANGUAGE "Japanese"

スタートメニューへの登録

以下のコードでスタートメニューへの登録をします。

  # スタート メニューにショートカットを登録
CreateDirectory "$SMPROGRAMS\office54"
SetOutPath "$INSTDIR"

このコードにより、インストールが無事成功すると自動的にスタートメニューにもアプリケーションのショートカットを登録できます。

NSISのインストーラーによるスタートメニューへの登録

デスクトップへショートカットを作成

以下のコードでデスクトップに指定したファイルのショートカットを作成します。

  # デスクトップにショートカットを作成
CreateShortcut "$SMPROGRAMS\office54\office54.lnk" "$INSTDIR\office54.exe" ""
CreateShortcut "$DESKTOP\office54.lnk" "$INSTDIR\office54.exe" ""

「プログラムと機能」にアプリを登録

以下のコードで「プログラムと機能」にアプリを登録します。

  # レジストリに登録
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\office54" "DisplayName" "office54"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\office54" "UninstallString" '"$INSTDIR\Uninstall.exe"'

NSISを用いたインストーラー作成(コンパイル)

作成したnsiファイルを使ってインストーラーを作成します。

NSISを起動したら"Compile NSI script"をクリックします。

NSISホーム画面からコンパイルNSI Scriptへ

次に表示された画面左上のファイルのマークをクリックします。

スクリプトファイルを選択

すでに作成したnsiファイルを選択します。

スクリプトファイルの選択

nsiファイルを選択すると自動的にコンパイルが走ります。
nsiファイルの中身に問題なければインストーラーは作成されます。

NSISのインストーラー作成終了画面

上記画面では1つ注意が表示されていますが、使用する分には全く問題ありません。

作成されたインストーラーはnsiファイルが保存されているフォルダ内に作成されています。

まとめ

「【NSIS】Windows向けインストーラーの作成方法:Modern UIを使用」はいかがでしたか?

みなさん問題なくインストーラーが作成できたかと思います。

作成したプログラムを配布するためにNSISをぜひ活用してください。