exewrap v0.7.1

インストール

インストールは不要です。適当な場所に exewrap.exe をコピーしてお使いください。 JDK のインストールディレクトリ bin にコピーしておくと javac.exejar.exe と一緒にパスが通せて便利です。

使ってみよう

JAR ファイルを exewrap.exe の引数に指定するだけで、簡単に EXE ファイルが作成できます。 JDK に付属している有名なサンプルプログラム SwingSet2.jar を EXE ファイルに変換する場合は次のようにします。
C:\>exewrap.exe SwingSet2.jar
できあがった SwingSet2.exe をダブルクリックして実行すると、SwingSet2 が起動します。 ただ、実行時にコンソールウィンドウが表示されてしまって邪魔です。 オプション -g を指定すると、コンソールアプリケーションではなくウィンドウアプリケーションとして EXE ファイルが作成されます。
C:\>exewrap.exe -g SwingSet2.jar
これでコンソールウィンドウが表示されなくなりました。 exewrap には、他にも便利なオプションが備わっています。詳細はオプション一覧を確認してください。

アプリケーションの種類と特徴

exewrap では、コンソールアプリケーション、ウィンドウアプリケーション、サービスアプリケーションが作成できます。 それぞれのアプリケーションの特徴を紹介します。

コンソールアプリケーション

コンソール(コマンドプロンプト)用のアプリケーションです。 オプション -g および -s のいずれも指定しない場合、コンソールアプリケーションとなります。

ウィンドウアプリケーション

ウィンドウを持つアプリケーションです。 オプション -g を指定すると、ウィンドウアプリケーションになります。 ウィンドウアプリケーションには以下の特徴があります。

サービスアプリケーション

常時動作させるためのサービス用アプリケーションです。 オプション -s を指定すると、サービスアプリケーションになります。

サービスアプリケーションを作成する場合、メインクラスに次のふたつのメソッドを実装する必要があります。
public static void start(String[] args)
public static void stop()
これらのメソッドは、Windows のサービスコントロールマネージャ(SCM)によって呼び出されます。 start メソッドはサービスを開始したときに、stop メソッドはサービスを停止したときに呼び出されます。 開発者は、stop() メソッドが呼び出されたあと、start メソッドが終了するようコードを書かなければなりません。 たとえば、start メソッドを無限ループで設計してしまうのは問題です。実装例 ServiceSample.java を参考にしてください。

完成したサービスアプリケーションに引数 -install を指定して実行すると Windows サービスに登録されます。 サンプルプログラム ServiceSample.jar をサービスに登録するには次のようにします。
C:\>exewrap.exe -s ServiceSample.jar
C:\>ServiceSample.exe -install
サービス実行時の引数を指定する場合は、-install に続いて記述してください。 サービス実行時の引数は、start メソッドの引数 String[] args として渡されます。
C:\>ServiceSample.exe -install foo bar
サービスをアンインストールする場合の例をあげます。 サービスのアンインストールは、サービスを停止してから行ってください。 また、イベントビューアが開いている状態では、正しくサービスをアンインストールすることができないので注意してください。
C:\>ServiceSample.exe -remove
サービスアプリケーションには以下の特徴があります。

外部ライブラリの読み込み

Java には自動的に外部ライブラリ(JAR)を読み込むための仕組み(Extension Framework)があります。 既定では、JRE をインストールしたディレクトリの lib\ext が拡張ディレクトリとなります。 拡張ディレクトリに配置された外部ライブラリ(JAR)は、クラスパスに明示的に指定することなく使用できます。

exewrap で作成されたアプリケーションは、アプリケーションファイル(EXE)のあるディレクトリに、 lib ディレクトリが存在する場合、lib ディレクトリを自動的に拡張ディレクトリ(java.ext.dirs)に追加します。 JDBC ドライバなどの外部ライブラリは、アプリケーションファイル(EXE)と同じところに lib ディレクトリを作成し、そのディレクトリ内に配置することができます。

lib ディレクトリには PATH も通されるため、DLL を配置することもできます。

lib ディレクトリ内のライブラリファイル(JAR)が既定の拡張ディレクトリにコピーされるわけではありません。
※ PATH が通るのは実行プロセスのみです。環境変数 PATH には影響を与えません。

システムプロパティ

exewrap で作成したアプリケーションは実行時に、いくつかのシステムプロパティを自動的に設定します。
システムプロパティ説明
 java.application.pathアプリケーションファイルのパスを保持しています。
 java.application.nameアプリケーションファイル名を保持しています。
 java.application.versionアプリケーションのバージョンを保持しています。

たとえば、アプリケーションの完全なパスを取得するために次のコードが使用できます。

System.getProperty("java.application.path") + "\\"
  + System.getProperty("java.application.name")

セキュリティマネージャ

exewrap で作成したアプリケーションは、簡単にセキュリティマネージャを有効にすることができるようになっています。 アプリケーションと同じディレクトリにベースネームの同じポリシーファイルを配置することで、自動的にセキュリティマネージャが有効になります。

たとえば、作成したアプリケーションを MyApp.exe とした場合、同じディレクトリに MyApp.policy を配置することで、セキュリティマネージャが有効になります。これは VM引数 -Djava.security.manager -Djava.security.policy=MyApp.policy が指定されたのと同じ意味を持ちます。

JRE 検索

exewrap で作成されたアプリケーションは、アプリケーションファイル(EXE)のあるディレクトリに、 jre ディレクトリが存在する場合、jre ディレクトリを Java 実行環境として使用します。 この方法を利用すると、システムに JRE がインストールされていない環境でも jre ディレクトリを 単純にコピーするだけでアプリケーションを実行することできます。

jre ディレクトリが存在しない場合は、レジストリを参照してシステムにインストールされている JRE を検索します。

オプション一覧

exewrap のオプション一覧です。
オプション説明
 -g ウィンドウ(GUI)アプリケーションを作成します。
 -s サービスアプリケーションを作成します。
 -e <ext-flags> 拡張フラグを指定します。詳細は拡張フラグ一覧を確認してください。
 -a <vm-args> アプリケーション実行時の VM 引数を指定します。
 -i <icon-file> EXE ファイルに指定したアイコンを埋め込みます。
 -v <version> EXE ファイルにバージョン情報を埋め込みます。 バージョン指定の書式は、メジャーバージョン、マイナーバージョン、リビジョン、ビルドナンバーをピリオドで区切って指定します。 リビジョンやビルドナンバーを省略することもできます。 ビルドナンバーを省略して EXE ファイルを既存のファイルに上書き作成した場合、自動的にビルドナンバーが +1 されます。
 -d <description> EXE ファイルに説明情報を埋め込みます。説明にはアプリケーション名やアプリケーションの機能を記述します。 サービスアプリケーションの場合にはサービスの説明としてコントロールパネルのサービスにも表示されます。 説明文に半角スペースを含める場合は、説明全体をダブルクォーテーションで囲む必要があります(コマンドプロンプトの場合)。 ant から exewrap を呼び出す場合は、ダブルクォーテーションではなくシングルクォーテーションを使用します。
 -c <copyright> EXE ファイルに著作権表示を埋め込みます。 オプション -d と同様に、ダブルクォーテーションやシングルクォーテーションが必要になることがあります。
 -j <jar-file> 変換元となる実行可能 JAR ファイルを指定します。 JAR ファイルはマニフェストファイルでメインクラスが指定された実行可能形式でなければなりません。 オプション -j を省略した場合、最後の引数を JAR ファイルと見なします。
 -o <exe-file> 変換先となる EXE ファイルを指定します。ファイルがすでに存在している場合、上書きされます。 オプション -o を省略した場合、変換元 JAR ファイルの拡張子を exe に置き換えた名前でファイルが作成されます。

拡張フラグ一覧

拡張フラグの一覧です。拡張フラグはアプリケーションに特別な機能を与えます。拡張フラグは -e オプションで指定します。複数の拡張フラグを指定する場合はセミコロン ; でフラグを区切ってください。 たとえば、拡張フラグ SINGLEDDE_CONNECT を指定する場合は以下のように指定します。
C:\>exewrap.exe -g -e SINGLE;DDE_CONNECT test.jar
拡張フラグ説明
 SINGLE アプリケーションの二重起動を禁止します。既にアプリケーションが起動している状態で、 新たにアプリケーションを起動しようとした場合、新たに起動しようとしたアプリケーションは何もせずに終了します。
 DDE_CONNECT アプリケーションの二重起動を禁止します。すでにアプリケーションが起動している状態で、 新たにアプリケーションを起動しようとした場合、新たに起動しようとしたアプリケーションから既に起動しているアプリケーションへ 通知がおこなわれ、既に起動しているアプリケーションの main メソッドが再度実行されます。 main メソッドに渡される引数には、新たに起動しようとしたアプリケーションのコマンドライン引数が設定されます。 新たに起動しようとしたアプリケーションは終了します。 この機能を使用すると、二重起動を試みたときに起動済みのアプリケーションを最前面に表示したり、 ひとつの Java VM を共有してアプリケーション画面を複数起動することができます。


2007/03/08 HIRUKAWA Ryo