WPFアプリ(.NET Frameworkアプリ)などのデスクトップアプリを作成したら、アプリを公開するためにはインストーラーを作成する必要が出てきます。インストーラーを作成するときにはどのような技術を使えるのでしょうか?
インストーラー作成に使用する技術
Windows でデスクトップアプリのインストーラーを作成するときに使用する技術としてはいくつかあります。代表的なもととして
- Windows Installer技術
- InstallScript技術
- MSIX技術
などがあります。多くの場合は前者二つのいずれかが利用されます。
Windows Installer技術
Windows Installer技術はマイクロソフトが2000年頃に導入したインストール技術です。ファイルのコピー・削除・更新、レジストリの更新、COM登録やNTサービスの登録など、アプリのインストーラーとして必要となる機能は、標準で用意されています。標準で用意されていない機能を実現したいときは、カスタムアクション(Custom Action)を利用します。カスタムアクションは、外部プログラム(EXEファイル)の呼び出し、外部関数(DLLファイル)の呼び出しやスクリプト(VBScriptなど)の呼び出しなどの方法で機能を実現します。
InstallScript技術
InstallScript技術は、InstallShieldというインストーラー作成ツールでのみ利用できるInstallShieldのための独自技術です。InstallScript技術は歴史が長いため、長くの間、インストーラーのデファクトスタンダードとなっていました。当初のInstallScript技術には、ファイルのコピー・削除・更新、レジストリの更新などの機能も独自のランタイムエンジンに実装されていました。そのInstallShieldも現在では、インストーラーとしての基本的な機能を実現するための下回りにWindows Installer技術を利用しています。そして過去に多く使われていたInstallScriptというスクリプトをそのまま使えるようにWindows Installerのカスタムアクションでスクリプトエンジンを追加しています。
MSIX技術
2018年のマイクロソフトの開発者イベント(Microsoft Build 2018など)でMSIXという新しいインストール技術が発表されました。Desktop Bridgeをベースにしたもののようです。Windows 7でもサポートされる計画のようですが、Windows 10上での作成ツール「MSIX Packaging Tool」は、2018年8月時点でも、まだプレビュー段階であるため、一般用途に使うにはまだ早い感じがします。
Windows Installer技術におけるファイル形式
Windows Installer技術で作成するファイルは、拡張子がmsi / msp / mst / msmのファイルとなります。
それぞれのファイルの概要は以下の通りです。
- msiファイル:フルインストーラー。このファイル単体でアプリをインストールすることができます。
- mspファイル:差分インストーラー。アプリをインストール済みの環境に修正を加えることができます。差分情報のみのためファイルサイズは小さくなります。フルインストーラーでインストールされている環境にのみ、このファイルを使ってインストールできます。このファイルはマイクロソフトのツールを使用して二つのmsiファイルの差分情報から作成します。
- mstファイル:インストーラーをローカライズ情報などで変換するための変換ファイル。アプリをインストール済みの環境に適用するものではなく、インストール時にmsiファイルやmspファイルに適用するファイルとなります。たとえば、msiファイルを英語版として作成し、UIの文字列リソースのみをmstファイルとして作成すると、英語版msiファイルに日本語mstファイルを適用してインストールを実行すると日本語のUIでインストーラが実行されることになります。
- msmファイル:マージモジュールというインストーラーに組み込むためのインストーラーの部品。msiファイルを作成するときに取り込んで使用します。msmファイル単体ではインストーラーとして機能しないため、msmファイルをアプリのユーザーに配ることはしません。msmファイルは単体で実行できないのみで、中身はインストーラーそのものです。マイクロソフトのVC++のランタイムライブラリなどは、アプリのインストーラーに取り込めるようにmsm形式で提供されています。
です。多くの場合、msiファイルのみを使用します。
msiファイルの形式
msi形式のインストーラーは、すべてのファイルをmsiファイル内に含む単一msiファイルのインストーラーとして作成すること、もしくは、msiファイルと複数のファイルで構成されるインストーラーとして作成すること、のどちらの形式でも作成できます。
CD-ROMなどで配布するのであれば、複数ファイル形式のインストーラーでもよいですが、インターネットから配布することを考えると単一msiファイル形式で作成することを強く勧めます。
EXEファイル形式
また、インストーラー作成ツールによっては、exeファイル形式にパッケージするものもあります。そもそも、msi形式のインストーラーは、単一ファイルで作成できるので、EXEファイル形式にパッケージするくらいなら、単一msiファイル形式で作成するのが良いです。
というは、msiファイル形式であれば、近年、様々なインストーラーで問題となっているDLLハイジャッキングの脆弱性に該当しなくなるためです。
単一EXEファイル形式にパッケージする場合は、そのパッケージャーがDLLハイジャッキングの脆弱性がないことを確認しましょう。多くのパッケージャーは、Windows 8.0以降にはすべてのWindows環境に対応できていますが、Windows 7以前では、Windows環境によって、DLLハイジャッキングの脆弱性に対応できていたりできていなかったりします。なお、本サイトで公開しているパッケージャーであるFile Package Appでは、Window XP以降のすべてのWindows環境で既知のDLLハイジャッキングの脆弱性に対応できています。
Windows Installer技術向けの開発環境
Windows Installer技術では、各種インストール情報をテーブルという概念に基づいて保持します。Windows Installer技術でインストーラーを作成するということは、最終的には、Windows Installer技術のルールに従ったテーブルを完成させることを意味します。そのテーブル作成を手助けする代表的な開発ツールは、
- Orca
- InstallShield
- WiX (Windows Installer XML toolset)
などがあります。
Orca
Orcaは、msi/msm/msp形式ファイルを直接開き、テーブルの内容を確認・修正することができます。当初はWindows Installer SDKの一部としてマイクロソフトからリリースされました。現在(2018年8月時点)は、Windows 10 SDK (10.0.17134.0)に同梱されているものが最新です。
Windows 10 SDKをインストールしても、Orcaのインストーラーが配置されるだけで、Orca自体はインストールされません。Orcaのインストーラーは、64ビットWindowsの場合、”C:\Program Files (x86)\Windows Kits\10\bin\10.0.17134.0\x86\”のフォルダーにOrca-x86_en-us.msiというファイル名で配置されているので、これをインストールするとOrcaが利用できるようになります。
InstallShield
InstallShieldは、1990年代からWindows向けインストーラー作成ツールとしてデファクトスタンダードとなっているツールです。
InstallShieldは当初はInstallScriptという独自技術のみで構成されていました。現在のInstallShieldは、InstallScriptを使うこともできますが、InstallScriptを使わず、純粋なWindows Installer技術のみを利用したインストーラーも作成できます。このツールでは、Orcaと同じようにテーブル形式で直接編集することもできますが、GUI形式で情報を構造化した状態で編集できます。ただし、このツールは商用ツールであり、ひとつの言語(日本語のみ)に対応したものでも128,000円からと高価です。現在(2018年8月時点)は、2018年1月にリリースされたInstallShield 2018が最新版です。
WiX (Windows Installer XML toolset)
WiXは、マイクロソフトの有志による開発を発祥とし、オープンソース化され、無料で使用できるツールです。2004年に1.0がリリースされました。現在(2018年8月時点)は、2018年1月にリリースされた3.11.1が最新版です。
WiXでは、作成するインストーラーの情報をXML形式のテキストファイルで定義します。
作成するXMLファイルのは以下のようなファイルとなります。
<?xml version='1.0' encoding='windows-1252'?> <Wix xmlns='http://schemas.microsoft.com/wix/2006/wi'> <Product Name='Foobar 1.0' Manufacturer='Acme Ltd.' Id='YOURGUID-86C7-4D14-AEC0-86416A69ABDE' UpgradeCode='YOURGUID-7349-453F-94F6-BCB5110BA4FD' Language='1033' Codepage='1252' Version='1.0.0'> <Package Id='*' Keywords='Installer' Description="Acme's Foobar 1.0 Installer" Comments='Foobar is a registered trademark of Acme Ltd.' Manufacturer='Acme Ltd.' InstallerVersion='100' Languages='1033' Compressed='yes' SummaryCodepage='1252' /> (出典: The Software Package)
WiXをVisual Studio上で使用できるようにするアドオンWiX toolset Visual Studio 201x Extensionもあります。
さて、デスクトップアプリのインストーラーを作成するのには、何を使えばいのでしょう。
私はどのツールも使ったことがあります。私見ですが、以下のように考えます。
Orca
このツールを使っていちからインストーラーを作成するのには適していません。しかし、作成したmsi/msp/msmファイルを調べたり、解析したりするために使うのにはとても便利なツールです。
InstallShield
Windows Installer技術の仕組みを隠ぺいし、直感的なGUIで編集が行えるなど高機能です。ただ、ツールの価格が10万円以上します。このコストが許されるなら、インストーラの作成時間も短縮できて良いと思います。また、ツールが高機能なためWindows Installer技術に詳しくなくても、インストーラーが作成できるので、インストーラー作成に必要な人材の敷居を下げると思います。
WiX
無料で使えるのが一番のメリットであると思います。XML形式のファイルで作成できるので、テキストエディターがあれば編集できます。ただし、Windows Installer技術の仕組みをそのままXML形式で表現しているのに近いです。そのため、インストーラーの作成者はWindows Installer技術の仕組みを理解していないと、中途半端なインストーラーになる可能性があります。インストーラー作成者がWindows Installer技術のことを理解しているのであればこのツールも選択肢となります。