Inno Setup でインストーラーを作成してみました

Windows のインストーラーを作成する必要がありましたので調べました。

環境

  • Windows 10 Pro
  • Inno Setup 5.5.9

InstallShield

インストーラーに含めるアプリケーションが、 Visual Studio で開発したものなので、 Professional 以上であれば付属している InstallShield Limited Edition を使うことを考えていました。

*InstallShield Limited Edition for Visual Studio is included with Visual Studio 2010 and newer versions.

InstallShield Limited Edition for Visual Studio supports the following Visual Studio editions:

  • Professional
  • Premium
  • Enterprise
  • Ultimate

*Visual Studio Community Edition is not supported.

InstallShield Limited Edition for Visual Studio - Registration

ただ、使っている Visual Studio のエディションが Community で、 “Community は対象外” と記載されています。

それから、過去に InstallShield を使ったことがあるのですが、ライセンスの関係から自分だけしかインストーラーを作成することができない状況になってしまった経緯があります。 それは避けたいという思いから、他のインストーラー作成ツールを探してみました。

次の記事が参考になりました。

Windows Installerの仕組みを使わないツール

2種類紹介します。

Inno Setup

Inno Setupは、基本的に.iniファイルのような書式でソースファイルを記述していきます。カスタマイズは、今となってはマイナーなPascal言語ですが、それほど複雑なことをやるわけではないので、他の言語の心得があれば簡単に習得できます。Inno Script Studio script editorというGUIツールも用意されていますが、起動も早く安定していて、秀逸な出来です。 Windows Installerの仕組みを使わないツールとしては、イチオシです。

Nullsoft Scriptable Install System (NSIS)

NSISも比較的使われているツールだと思います。NSIS本体は最低限の機能しか持っていませんが、多くの方がプラグインで色々な機能を提供しています。業務で使う場合は、各プラグインのライセンスがどうなっているか気をつける必要があるでしょう。

インストーラー作成ツールの選択 - Qiita

次の 2 つが考えられるようです。

トレンド

Inno Setup と NSIS の傾向を調べてみました。

平均的には NSIS の方が使われてるようです。

が、 Qiita の記事を参考に、 Inno Setup を採用することにしました。

Inno Setup をインストール

Inno Setup Downloads のページからダウンロードしました。

unicode とそうでないものがあるようですが、日本語を扱うので、 unicode の方を選択しました。

QuickStart Pack というものもあるようですが、 Inno Script Studio script editor というエディターが使用できたり、する程度みたいでしたので、通常のものをインストールすることにしました。 エディターは Visual Studio Code でも十分だと思いまして。

インストールのウィザードは基本的に初期値のまま進めました。

Inno Setup Preprocessor という選択があって、これは .iss ファイルの中で #define が使えるもののようです。 アプリケーションの名前やバージョンや発行元などが定数のように定義しておけるため、保守性が高くなるようです。 Install Inno Setup Preprocessor のチェックボックスにチェックをしてウィザードを進めました。

.iss ファイル作成ウィザード

Inno Setup では、インストーラーを作成するためのソースコードは .iss ファイルになるようです。 .iss ファイルはウィザードから作成できるようなので、ウィザードを使ってみます。

Inno Setup のメニューから [File]-[New] でウィザードを起動します。 Next をクリックします。

Application Infomation を入力します。

コントロールパネルのプログラムと機能の名前、バージョン、発行元、サポートのリンク、ヘルプのリンク、更新情報に表示される内容です。 Windows 10 の設定のアプリと機能には名前、バージョン、発行元だけが表示されるみたいです。

  • Application Name
  • Application Version
  • Application Publisher
  • Application website

Application Folder を入力します。

Program Files の中を選択することもできますし、それ以外を指定することもできるようです。

Allow user to change the appliation folder にチェックすると、ユーザーが任意のフォルダーにアプリケーションをインストールできるようです。 逆に、チェックしないと、決まったフォルダーにアプリケーションをインストールさせることができるようです。

Application Files を入力します。

Application main executable file にメインの実行ファイルを指定します。

Allow user to start the application after Setup has finished にチェックすると、インストール直後にメインの実行ファイルを実行させることができるようです。

Other application files にアプリケーションに必要なファイル(設定ファイル、ライブラリー、データ)を指定します。 個別のファイルとして指定することもできますし、フォルダーを指定することもできます。

Application Shortcuts を入力します。

Create a shortcut to the main executable in the common Start Menu Programs folder にチェックすると、スタートメニューにアプリケーションのショートカットを作成できるようです。

Allow user to create a desktop shortcut にチェックすると、デスクトップにショートカットを作成させることができるようです。

Application Documentation を入力します。

ライセンスファイルやお知らせファイルを指定できるようです。

Setup Languages を入力します。

ユーザーが選択した言語でセットアップを進めることができるようです。 日本語もありました。

Compiler Settings を入力します。

Custom compiler output folder は標準だと Output フォルダーになるようです。

Compiler output base file name が setup だと setup.exe としてインストーラーが作成されるようです。

Custom Setup icon file で setup.exe のアイコンを指定できるようです。

Setup password でインストーラーを起動する際のパスワードが指定できるようです。

Inno Setup Preprocessor を入力します。

Yes, use #define compiler directives にチェックすると、 #define でアプリケーションの名前やバージョンを .iss ファイルに記述してくれるようです。

Finish をクリックします。

Inno Setup Script File が作成できました。

メニューから [Build]-[Compile] か、再生のマークからコンパイルできるようです。

.iss ファイル

Inno Setup のいいところは .iss ファイルがテキスト形式で、テキストエディターから修正できることです。 バージョン管理しておけばやり直ししやすいです。

ウィザードから標準の選択のまま作成した .iss ファイルは次の通りです。

; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!

#define MyAppName "My Program"
#define MyAppVersion "1.5"
#define MyAppPublisher "My Company, Inc."
#define MyAppURL "http://www.example.com/"
#define MyAppExeName "MyProg.exe"

[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{FFD0E913-41AE-470B-A642-FB90E9FC812F}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
DisableProgramGroupPage=yes
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes

[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked

[Files]
Source: "C:\Program Files (x86)\Inno Setup 5\Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion
; NOTE: Don't use "Flags: ignoreversion" on any shared system files

[Icons]
Name: "{commonprograms}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon

[Run]
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent


インストーラーに含めるファイルを変更するだけなら、 [Files] セクションをテキストエディターで修正するだけで済みます。

その他にも、 Inno Setup のフォルダーに examples がいくつかあって、参考にできそうでした。

コンパイル

.iss ファイルをコンパイルします。 GUI からでも実行することができますが、開発においては CUI から実行できた方が扱いやすいです。

Command Line Compiler Execution

Scripts can also be compiled by the Setup Compiler from the command line. Command line usage is as follows:

compil32 /cc <script name>

Example:
compil32 /cc "c:\isetup\samples\my script.iss"

As shown in the example above, filenames that include spaces must be enclosed in quotes.

Running the Setup Compiler from the command line does not suppress the normal progress display or any error messages. The Setup Compiler will return an exit code of 0 if the compile was successful, 1 if the command line parameters were invalid, or 2 if the compile failed.

Alternatively, you can compile scripts using the console-mode compiler, ISCC.exe. Command line usage is as follows:

iscc [options] <script name>
Or to read from standard input:
iscc [options] -

Example:
iscc "c:\isetup\samples\my script.iss"

As shown in the example above, filenames that include spaces must be enclosed in quotes.

Valid options are: “/O-” to disable output (overriding any Output setting in the script), “/O+” to enable output (overriding any Output setting in the script), “/O” to specify an output path (overriding any OutputDir setting in the script), “/F” to specify an output filename (overriding any OutputBaseFilename setting in the script), “/S” to specify a Sign Tool (any Sign Tools configured using the IDE will be specified automatically), “/Q[p]” for quiet compile (print only error messages, “p” will show progress info), and “/?” to show a help screen.

Example:
iscc /Qp /O"My Output" /F"MyProgram-1.0" /Sbyparam=$p "c:\isetup\samples\my script.iss"

ISCC will return an exit code of 0 if the compile was successful, 1 if the command line parameters were invalid or an internal error occurred, or 2 if the compile failed.

Inno Setup Help

compil32 は GUI のウィンドウが表示されて、コンパイルが始まるようです。 iscc は CUI のコンソールの標準出力を使って、コンパイルが始まるようです。 開発では CUI の方が扱いやすいので、 iscc を使いたいと思います。 パスが設定されていないようでしたので、 Inno Setup をインストールしたフォルダーのパスも含めて指定します。

PowerShell から次のように入力しました。

PS> & "C:\Program Files (x86)\Inno Setup 5\ISCC.exe" testsetup.iss

標準出力には次のように出力されました。

Inno Setup 5 Command-Line Compiler
Copyright (C) 1997-2016 Jordan Russell. All rights reserved.
Portions Copyright (C) 2000-2016 Martijn Laan
Inno Setup Preprocessor
Copyright (C) 2001-2004 Alex Yackimoff. All rights reserved.

Compiler engine version: Inno Setup 5.5.9 (u)

[ISPP] Preprocessing.
[ISPP] Preprocessed.

Parsing [Setup] section, line 14
Parsing [Setup] section, line 15
Parsing [Setup] section, line 16
Parsing [Setup] section, line 18
Parsing [Setup] section, line 19
Parsing [Setup] section, line 20
Parsing [Setup] section, line 21
Parsing [Setup] section, line 22
Parsing [Setup] section, line 23
Parsing [Setup] section, line 24
Parsing [Setup] section, line 25
Parsing [Setup] section, line 26
Reading file (WizardImageFile)
   File: C:\Program Files (x86)\Inno Setup 5\WIZMODERNIMAGE.BMP
Reading file (WizardSmallImageFile)
   File: C:\Program Files (x86)\Inno Setup 5\WIZMODERNSMALLIMAGE.BMP
Preparing Setup program executable
Determining language code pages
Parsing [Languages] section, line 29
   File: C:\Program Files (x86)\Inno Setup 5\Default.isl
   Messages in script file
Reading default messages from Default.isl
Parsing [Languages] section, line 29
   File: C:\Program Files (x86)\Inno Setup 5\Default.isl
Parsing [LangOptions], [Messages], and [CustomMessages] sections
   Messages in script file
Reading [Code] section
Parsing [Tasks] section, line 32
Parsing [Icons] section, line 39
Parsing [Icons] section, line 40
Parsing [Run] section, line 43
Parsing [Files] section, line 35
Deleting setup.exe from output directory
Creating setup files
   Compressing: C:\Program Files (x86)\Inno Setup 5\Examples\MyProg.exe
   Compressing Setup program executable
   Updating version info

Warning: Setting the [Setup] section "OutputBaseFileName" to "setup" is not recommended, all executables named "setup.exe" are shimmed by Windows application compatibility to load additional DLLs, such as version.dll. These DLLs are loaded unsafely by Windows and can be hijacked. Use a different name, for example "mysetup".

Successful compile (3.687 sec). Resulting Setup program filename is:
C:\testsetup\Output\setup.exe

setup.exe というファイルの名前をつけることはおすすめしない、という警告は出ましたが、正常終了したみたいです。

Output フォルダーの中に setup.exe のインストーラーが作成されたようです。

終わり

Google Trends の傾向は、 Inno Setup も NSIS も下り坂でした。 .NET Framework のアプリケーションなら Click Once でもいいかな。 でも、オフラインの PC とかもあるみたいですから、今後もインストーラーは残るのかな。