ポータブルアプリケーション

USBドライブ。横のスケールはmm単位

ポータブルアプリケーション: Portable Application)とは、実行するにあたってコンピュータの固定二次記憶装置インストールする必要がないソフトウェアであり、CD-ROMUSBメモリフラッシュメモリフロッピーディスクなどの可搬媒体から実行できるものをいう。互換性のある任意のコンピュータシステム上で動作させることができ、一般にオペレーティングシステム (OS) が同じであればよい(例えば、Windows XP以上や、Linuxなど)。この場合の「ポータブル」は「可搬」という意味であり、「移植」という意味ではない(ソースコードコンパイルによって異なるプラットフォームで動作できるよう設計されているわけではない)。

ポータブルアプリケーションは、自身の設定情報やデータもプログラム本体と同じ可搬媒体に格納できるよう設計されている。

Windows

Windows向けソフトウェアの多くは、ポータブルな設計ではない。レジストリMicrosoft Installerの構造が、インストールしたプログラムとマシンを結び付けてしまうためである。多くのWindowsアプリケーションはレジストリを多用しており、状態情報もファイルシステムの各所に格納している。

ポータブルアプリケーションにするためには、実行前と実行後でそのコンピュータ内のファイルに変化を与えないようにしなければならない。すなわち、レジストリを使うことはできず、アプリケーションのインストールされたディレクトリ以外にファイルを残すこともできない。可搬媒体にインストールする場合、設定をレジストリではなくINIファイルなどの設定ファイルに格納する必要がある。

アプリケーションのソース修正をせずに可搬性を実現する手法として、アプリケーション仮想化がある。これは、アプリケーションがファイルシステムやレジストリにアクセスしようとしたとき、その要求を横取り(インターセプト)し、(アプリケーション自身は知らない)別の媒体上のファイルへのアクセスに変換するランタイム層を設けるものである。この場合、アプリケーション自体は変更せず、なおかつ可搬性を実現できる。

このランタイム層は、DLLインジェクションと呼ばれる技法を使って実行時にアプリケーションへ埋め込まれ、アプリケーション毎のラッパーを形成する[1]。このラッパーはアプリケーション起動時に活性化され、ファイルやレジストリに関連するシステムコールをフックしてリダイレクトし、可搬媒体上だけを操作する。

この手法[1]は、アプリケーション全体だけでなく、個々のコンポーネント(ランタイムライブラリCOMコンポーネント、ActiveX)にも適用できる。これを利用すると、同じOS上で競合することなくそれぞれ設定の異なる複数のポータブルアプリケーションのインストールを行うことができる。このようなコンポーネントはOSが保護しているレジストリなどにアクセスしないため、インストールや管理において特権を必要としない。

他の言語で