exewrapは実行可能JARファイルからEXEファイルを生成するツールです。Windows環境でJavaアプリケーションを簡単に起動できるようにします。

JETGCJ のようにネイティブコードにコンパイルするツールではありません。 JSmoothlaunch4j と同じように Java アプリケーションの起動を容易にするツールです。

2017/11/28 バージョン 1.2.3 リリース
実行時にVMオプションを変更するための VMオプション・ファイル参照機能を追加しました。

特徴

  • x64(64-bit)用EXEファイルを生成することができます。x86(32-bit)にも対応しています。
  • JARファイルをEXEファイル内に含めることができます。
  • タスクマネージャーにjava.exe, javaw.exeではなくEXEファイル名が表示されます。
  • 一時ファイルを出力しません。クラスファイルや画像リソースは直接メモリにロードされます。
  • ウィンドウアプリケーションはスプラッシュスクリーン表示に対応しています。
  • Windowsサービスを作成することができます。
  • 生成されるEXEファイルのサイズは、JARファイルのサイズ+40KBと軽量です。
  • Pack200アーカイブ形式でJARファイルを圧縮するためファイルサイズが小さくなります。
  • ユーザー アカウント制御(UAC)による権限昇格に対応しています。
  • プロセスの環境変数を設定する機能があります。

ライセンス

exewrapはBSDライクなライセンスを採用しています。BSDライセンスの条項に加えて、生成されたEXEファイルの利用には一切の制限が課されないことを明記しています。

Copyright (C) 2005-2017 HIRUKAWA Ryo. All rights reserved.

ソースコード形式であれバイナリ形式であれ、変更の有無に関わらず、以下の条件を満たす限りにおいて、再配布および使用を許可します。

  1. ソースコード形式で再配布する場合、上記著作権表示、本条件書および下記責任限定規定を必ず含めてください。
  2. バイナリ形式で再配布する場合、上記著作権表示、本条件書および下記責任限定規定を、配布物とともに提供される文書 および/または 他の資料に必ず含めてください。

本ソフトウェアの実行により生成されたファイルの利用および配布について一切の制限を行いません。上記著作権表示、条件書、下記責任限定規定を含まずに、本ソフトウェアの実行により生成されたファイルを完全に自由に利用および配布することができます。

本ソフトウェアは HIRUKAWA Ryo によって、“現状のまま” 提供されるものとします。本ソフトウェアについては、明示黙示を問わず、商品用として通常そなえるべき品質をそなえているとの保証も、特定の目的に適合するとの保証を含め、何の保証もなされません。事由のいかんを問わず、損害発生の原因いかんを問わず、且つ、責任の根拠が契約であるか厳格責任であるか (過失その他) 不法行為であるかを問わず、HIRUKAWA Ryo も寄与者も、仮にそのような損害が発生する可能性を知らされていたとしても、本ソフトウェアの使用から発生した直接損害、間接損害、偶発的な損害、特別損害、懲罰的損害または結果損害のいずれに対しても (代替品またはサービスの提供;使用機会、データまたは利益の損失の補償;または、業務中断に対する補償を含め) 責任をいっさい負いません。

ダウンロード

インストール・使い方

インストールは不要です。適当な場所にexewrap.exeをコピーしてお使いください。

アプリケーションの種類

ウィンドウアプリケーション、Windowsサービス、コンソールアプリケーションの三種類のアプリケーションを作成することができます。

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

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

C:\>exewrap ConsoleSample.jar

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

ウィンドウを持つアプリケーションです。オプション -g を指定すると、ウィンドウ・アプリケーションになります。たとえば、JDKに付属しているサンプルプログラムSwingSet2.jarをEXEにする場合は次のようにします。

C:\>exewrap -g SwingSet2.jar

ウィンドウ・アプリケーションには以下の特徴があります。

  • 標準出力/標準エラー出力がファイルに書き出されます。 System.out.println()e.printStackTrace()などの出力を確認することができます。 拡張フラグ NOLOG を指定すると、このファイル出力機能を無効にすることができます。

  • キャッチされなかった例外をエラーダイアログで表示します。 最上位の main メソッドでもキャッチされずに、アプリケーション外まで伝播した例外をダイアログで表示します。同時に例外のスタックトレースがファイルに出力されるので、アプリケーションの異常終了時の状態を把握しやすくなります。

  • スレッドが異常終了した場合もエラーダイアログを表示してアプリケーション全体を終了させます。 スタックトレースのファイル出力がおこなわれます。 マルチスレッド・アプリケーションで、一部のスレッドが異常終了したまま アプリケーションの動作が続行されてしまう危険性がなくなります。 拡張フラグ IGNORE_UNCAUGHT_EXCEPTION を指定するとこの機能を無効にすることができます。

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

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

C:\>exewrap -s ServiceSample.jar

Windowsサービスを作成する場合は、メインクラスに次の2つのメソッドを実装する必要があります。

public static void start(String[] args)
public static void stop()

これらのメソッドは、Windowsのサービス・コントロール・マネージャー(SCM)によって呼び出されます。 start メソッドはサービスを開始したときに、stop メソッドはサービスを停止したときに呼び出されます。開発者は、stop メソッドが呼び出された後に、start メソッドが終了するように実装しなければなりません。 start メソッドを無限ループで設計してしまうと、サービスを停止できなくなります。実装例 ServiceSample.java を参考にしてください。

サービスのインストール

作成したWindowsサービスに、引数 -install を指定して実行するとサービスとして登録されます。サンプルプログラムServiceSample.jarをサービスとして登録する場合は次のようにします。

C:\>exewrap.exe -s ServiceSample.jar
C:\>ServiceSample.exe -install

サービス実行時の引数を指定する場合は、-install の後に続けて記述してください。サービス実行時の引数は、start メソッドの引数 String[] args として渡されます。

C:\>ServiceSample.exe -install foo bar

サービスのインストール時に、サービスの構成を指定することもできます。サービス構成オプションは -install よりも前に記述します。たとえば、サービスの実行アカウントを指定する場合は次のように指定します。サービス構成オプションの詳細は サービス構成オプション を確認してください。

C:\>ServiceSample.exe -u Administrator -p mypassword -install

サービスの開始

他のサービスと同様に、コントロール パネル管理ツールサービス から対象のサービスを選択して 開始 します。 net start コマンドでを使用してサービスを開始することもできます。

C:\>net start ServiceSample

サービスの停止

他のサービスと同様に、コントロール パネル管理ツールサービス から対象のサービスを選択して 停止 します。 net stop コマンドを使用してサービスを停止することもできます。

C:\>net stop ServiceSample

サービスのアンインストール

サービスのアンインストールは、サービスが停止している状態でおこなってください。また、イベントビューアが開いている状態では、正しくサービスをアンインストールすることができないので注意してください。

C:\>ServiceSample.exe -remove

Windowsサービスとして作成したアプリケーションには以下の特徴があります。

  • 標準出力/標準エラー出力がイベントログに書き出されます。 標準出力は「情報」としてイベントログに、 標準エラー出力は「警告」としてイベントログに出力されます。 出力はバッファリングされ、System.out.flush()System.err.flush() を呼び出したときにイベントログへの出力が行われます。 拡張フラグ NOLOG を指定すると、このイベントログ出力機能を無効にすることができます。

  • キャッチされなかった例外をイベントログに出力します。 例外がキャッチされずにアプリケーション外まで伝播すると、 例外発生時のスタックトレースがイベントログに「エラー」として記録され、サービスが停止します。

  • スレッドが異常終了した場合もイベントログに「エラー」としてスタックトレースを出力し、 サービスが停止します。拡張フラグ IGNORE_UNCAUGHT_EXCEPTION を指定するとこの機能を無効にすることができます。

  • 既定で Server VM を優先的に使用するように構成されます。Server VM がインストールされていない、 または、拡張フラグで CLIENTVM が指定された場合は Client VM を使用します。

その他の機能

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

exewrapで作成されたアプリケーションは、アプリケーションファイル(EXE)のあるディレクトリに、libディレクトリが存在する場合、libディレクトリ(およびサブフォルダ)を自動的にクラスパスに追加します。 JDBC ドライバなどの外部ライブラリは、アプリケーションファイル(EXE)と同じ場所にlibディレクトリを作成し、そのディレクトリ内に配置することができます。また、libディレクトリにはPATHも通されるため、DLLを配置することもできます。

  • オプション -L で、外部ライブラリの読み込みディレクトリを変更することができます。

  • オプション -L ではセミコロン(;)で区切ることで複数のディレクトリを指定することができます。

  • サブディレクトリも再帰的に対象となります。

  • PATH が通るのは実行プロセスのみです。環境変数 PATH には影響を与えません。

JRE検索

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

  • jre ディレクトリだけでなく、jre1.8.0_40 のようなバージョン付きディレクトリも検索対象となります。

  • jre で始まるディレクトリが存在しない場合は、環境変数 JAVA_HOME を Java 実行環境として使用します。

  • 環境変数 JAVA_HOME も定義されていない場合は、レジストリを参照してシステムにインストールされている JRE を検索します。

VMオプション・ファイル

アプリケーション実行時のVMオプションをVMオプション・ファイルで指定することができます。アプリケーションと同じディレクトリに、アプリケーションのファイル名 + .vmoptions という拡張子を付けたファイルを配置することで、自動的にVMオプション・ファイルとして認識します。

たとえば、作成したアプリケーションを MyApp.exe とした場合、同じディレクトリに MyApp.exe.vmoptions を配置すると、MyApp.exe 起動時に MyApp.exe.vmoptions に記載された内容がVMオプションとして自動的に設定されます。

VMオプション・ファイル(*.exe.vmoptions)には、行ごとに1つのVMオプションを記述していきます。

VMオプション・ファイルの設定例

MyApp.exe のヒープの最小値を256MB、ヒープの最大値を768MBに設定する場合は以下のようなテキストファイルを用意します。

(例) MyApp.exe.vmoptions
-Xms256m -Xmx768m
注意
必ず、VMオプション1つごとに改行してください。
改行せずにVMオプションを続けて記述すると正しく認識されません。

VMオプションにはどのようなものがありますか?

Java VMには非常に多くのVMオプションがあります。Java 8 の場合は以下のサイトが参考になります。

セキュリティ・マネージャー

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

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

スプラッシュ・スクリーン

exewrap は Java 6.0 から導入されたスプラッシュ・スクリーンに対応しています。 JAR ファイルがスプラッシュ・スクリーンを表示するように構成されていれば、 exewrap でも自動的にスプラッシュ・スクリーンが有効になります。

JAR ファイルでスプラッシュ・スクリーンを表示するように構成するには、マニフェストファイルで SplashScreen-Image オプションを使用してイメージのパスを指定する必要があります。 SplashScreen-Image オプションの指定については以下のURLを参照してください。

Pack200アーカイブ形式

exewrap は JAR ファイル形式に特化し高い圧縮率を実現する Pack200 アーカイブ形式に対応しています。 Pack200 アーカイブ形式を使用すると JAR ファイルのサイズを半分程度のサイズに圧縮することができます。 Pack200 アーカイブ形式は Java 実行環境 5.0(1.5.0) 以上で利用できます。

exewrap の -t オプションで 1.5 以上を指定することで自動的に Pack200 アーカイブ形式が使用されます。 -t オプションを省略した場合もターゲットバージョン 1.5 として扱われるため、Pack200 アーカイブ形式が使用されます。

システム・プロパティ

exewrap で作成したアプリケーションは実行時に、いくつかのシステムプロパティを自動的に設定します。

システム・プロパティ 説明
java.application.path アプリケーションファイルのパスを保持しています。
java.application.name アプリケーションファイルの名前を保持しています。
java.application.version アプリケーションのバージョンを保持しています。

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

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

環境変数を設定する

Java 標準クラスライブラリには環境変数を取得するための System.getenv(String name) があります。しかし、環境変数を設定するための方法は提供されていません。子プロセスに対しては ProcessBuilderのenvironment() を使って設定することができますが、この方法には以下の問題があります。

  • 自プロセスの環境変数を設定できるわけではない

  • 子プロセスの起動コードを制御できる必要がある(他者のライブラリ内で子プロセスを起動している場合に環境変数を設定するコードを追加するのが難しい)

この問題を解決するために exewrap では、環境変数を設定するユーティリティークラス exewrap.util.Environment を提供しています。以下のコードで環境変数を設定することができます。

Map<String, String> env;
env = (Map<String, String>) Class.forName("exewrap.util.Environment").newInstance();
env.put("NAME", "VALUE");

この環境変数を設定するコードは exewrap.util.Environment クラスを動的に生成し Map<String, String> インターフェースを通してアクセスしています。そのため、ビルド時に exewrap.util.Environment への参照を必要としません。このコードブロックを try-catch で囲い例外を無視するようにすれば、 exewrap で EXE 化していない実行可能 JAR でも実行を継続することができます。 (EXE 化していない場合は環境変数が設定されないことになります。)

オプション

基本オプション

引数オプション          説明
-g ウィンドウ・アプリケーションを作成します。
-s Windows サービス・アプリケーションを作成します。
-A <architecture> プログラムのアーキテクチャを指定します。x86x64 を指定することができます。生成したプログラムの実行には同じアーキテクチャの Java 実行環境が必要になります。x64 バイナリを 32 ビットの Java 実行環境で実行することはできません。64 ビット版の exewrap.exe を使用している場合、既定のアーキテクチャは x64 になります。64 ビット版のexewrap.exe を使用して 32 ビットバイナリを出力するには-A x86 を指定します。32 ビット版の exewrap.exe を使用している場合、既定のアーキテクチャは x86 になります。32 ビット版の exewrap.exe を使用して 64 ビットバイナリを出力するには -A x64 を指定します。
-t <target-version> プログラムの実行に必要な Java 実行環境のバージョンを指定します。値は内部バージョンで指定してください。つまり、Java 5.0、Java 6.0 はそれぞれ、1.51.6 と指定する必要があります。1.5 以上を指定すると、Pack200 アーカイブ形式が使用され出力ファイルサイズが小さくなります。
-2 Pack200 アーカイブ形式を無効にします。
-M <main-class> メインクラスを指定します。Executable JAR (実行可能 JAR)の場合はこのオプションを指定する必要はありません。
-L <ext-dirs> 外部ライブラリ(JAR)の読み込みディレクトリを指定します。複数のディレクトリを指定する場合はセミコロン ; でディレクトリを区切ってください。このオプションを指定しない場合、外部ライブラリの読み込みディレクトリとして既定でlib ディレクトリが設定されます。
-e <ext-flags> 拡張フラグを指定します。詳細は拡張フラグ一覧を確認してください。
-a <vm-args> アプリケーション実行時の VM 引数を指定します。
-b <vm-args> サービス・アプリケーションをコマンドプロンプトなどサービス・コントロール・マネージャー(SCM)以外から実行した場合に適用される VM 引数を指定します。
-i <icon-file> EXE ファイルに指定したアイコンを埋め込みます。ICO 形式をサポートしています。BMP/PNG/GIF 形式はサポートしていません。
-v <version> EXE ファイルにファイル・バージョン情報を埋め込みます。バージョン指定の書式は、メジャーバージョン、マイナーバージョン、リビジョン、ビルドナンバーをピリオドで区切って指定します。リビジョンやビルドナンバーを省略することもできます。ビルドナンバーを省略して EXE ファイルを既存のファイルに上書き作成した場合、自動的にビルドナンバーが+1 されます。
-d <description> EXE ファイルに説明情報を埋め込みます。説明にはアプリケーション名やアプリケーションの機能を記述します。Windowsサービス・アプリケーションの場合にはサービスの説明としてコントロールパネルのサービスにも表示されます。説明文に半角スペースを含める場合は、説明全体をダブルクォーテーションで囲む必要があります(コマンドプロンプトの場合)。ant から exewrap を呼び出す場合は、ダブルクォーテーションではなくシングルクォーテーションを使用します。
-c <copyright> EXE ファイルに著作権表示を埋め込みます。オプション -dと同様に、ダブルクォーテーションやシングルクォーテーションが必要になることがあります。
-C <company-name> EXE ファイルに会社情報を埋め込みます。オプション -d と同様に、ダブルクォーテーションやシングルクォーテーションが必要になることがあります。
-p <product-name> EXE ファイルに製品名を埋め込みます。オプション -d と同様に、ダブルクォーテーションやシングルクォーテーションが必要になることがあります。
-V <product-version> EXE ファイルに製品バージョンを埋め込みます。オプション-d と同様に、ダブルクォーテーションやシングルクォーテーションが必要になることがあります。
-j <jar-file> 変換元となる実行可能 JAR ファイルを指定します。JAR ファイルはマニフェストファイルでメインクラスが指定されている必要があります。オプション -j を省略した場合、最後の引数を JAR ファイルと見なします。
-o <exe-file> 変換先となる EXE ファイルを指定します。ファイルがすでに存在している場合、上書きされます。オプション -o を省略した場合、変換元 JAR ファイルの拡張子を .exe に置き換えた名前でファイルが作成されます。

拡張フラグ

拡張フラグはアプリケーションに特別な機能を与えます。拡張フラグは -e オプションで指定します。複数の拡張フラグを指定する場合はセミコロン ; でフラグを区切ってください。たとえば、拡張フラグ SINGLENOLOG を指定する場合は以下のように指定します。

C:\>exewrap.exe -g -e SINGLE;NOLOG SwingSet2.jar
拡張フラグ 説明
SINGLE アプリケーションの二重起動を禁止します。既にアプリケーションが起動している状態で、新たにアプリケーションを起動しようとした場合、新たに起動しようとしたアプリケーションは何もせずに終了します。
SHARE アプリケーションの二重起動を禁止します。すでにアプリケーションが起動している状態で、新たにアプリケーションを起動しようとした場合、新たに起動しようとしたアプリケーションから既に起動しているアプリケーションへ通知がおこなわれ、既に起動しているアプリケーションの mainメソッドが再度実行されます。main メソッドに渡される引数 args には、新たに起動しようとしたアプリケーションのコマンドライン引数が設定されます。新たに起動しようとしたアプリケーションは終了します。この機能を使用すると、二重起動を試みたときに起動済みのアプリケーションを最前面に表示したり、ひとつの Java VM を共有してアプリケーション画面を複数起動することができます。
NOLOG アプリケーションのログ出力機能を無効にします。ウィンドウ・アプリケーションでは、標準出力、標準エラー出力がログファイルに出力されなくなります。Windows サービス・アプリケーションでは、標準出力、標準エラー出力がイベントログに出力されなくなります。
NOSIDEBYSIDE アプリケーションと同じ場所にある JRE を検索しないようにします。
IGNORE_UNCAUGHT_EXCEPTION スレッドでキャッチされない例外が発生しても無視します。
CLIENTVM Client VM を優先して使用します。Client VM は、特にアプリケーションの起動時間を短縮し、メモリ消費を少なくするように作られており、クライアント環境に適合します。ウィンドウ・アプリケーションとコンソール・アプリケーションは既定で Client VM を使用するように構成されます。Windows サービス・アプリケーションで Client VM を使用する場合に、この拡張フラグを指定してください。Client VM を使用するように構成されていても、実行時にClient VM が見つからない場合は、自動的に Server VM を使用します。
SERVERVM Server VM を優先して使用します。Server VM は、操作の最高速度を高めるようにチューニングされており、長時間稼働するサーバーアプリケーションの実行用に設計されています。Windows サービス・アプリケーションでは既定でServer VM を使用するように構成されます。ウィンドウ・アプリケーション、コンソール・アプリケーションでServer VM を使用する場合に、この拡張フラグを指定してください。Server VM を使用するように構成されていても、実行時に Server VM が見つからない場合は、自動的にClient VM を使用します。

サービス構成オプション (インストール時)

インストール時のサービス構成オプションは、Windows サービスをインストールするときに指定することができます。インストール時のサービス構成オプションは -install よりも前に指定する必要があります。 -install よりも後に指定した引数は、サービスの実行時引数として渡されます。

スタートアップの種類を 手動 にしてサービスをインストールする場合は以下のようにします。

C:\>ServiceSample.exe -m -install
サービス構成オプション    説明
-install サービスとしてインストールします。他の構成オプションは、必ず-install よりも前に指定してください。この操作には管理者権限が必要です。管理者権限で実行されていない場合、ユーザー アカウント制御(UAC)ダイアログが表示され、権限昇格が要求されます。
-n <display-name> サービスの表示名を指定します。
-i デスクトップとの対話をサービスに許可します。
-m スタートアップの種類を 手動 にします。このオプションを指定しない場合、スタートアップの種類は 自動 になります。
-d <dependencies> サービスの依存関係を指定します。たとえばサービスがイベントログサービスを必要としている場合は、-d Eventlog としてイベントログサービスに依存させます。複数のサービスに依存する場合は、サービス名をセミコロン ; で区切ります。
-u <username> サービスの実行アカウントを指定します。通常のユーザーアカウントのほかにビルトイン・システムアカウントとして、NT AUTHORITY\SystemNT AUTHORITY\LocalServiceNT AUTHORITY\NetworkService が指定できます。
-p <password> サービス実行アカウントのパスワードを指定します。ビルトイン・システムアカウントを使用する場合は、パスワードを指定する必要はありません。
-s サービスをインストールした後に、ただちにサービスを開始します。

サービス構成オプション (アンインストール時)

アンインストール時のサービス構成オプションは、Windows サービスをアンインストールするときに指定することができます。アンインストール時のサービス構成オプションは -remove よりも前に指定する必要があります。

サービスを停止してからアンインストールする場合は以下のようにします。

C:\>ServiceSample.exe -s -remove
サービス構成オプション    説明
-remove サービスをアンインストールします。他の構成オプション -sは、必ず -remove よりも前に指定してください。この操作には管理者権限が必要です。管理者権限で実行されていない場合、ユーザー アカウント制御(UAC)ダイアログが表示され、権限昇格が要求されます。
-s サービスをアンインストールする前に、サービスを停止します。

変更履歴

Version 1.2.3 (2017/11/28)

  • 実行時にVMオプションを変更するための VMオプション・ファイル参照機能を追加しました。

Version 1.2.2 (2017/11/19)

  • 32ビット/64ビット両方のJREがインストールされている環境で64ビットプロセスを実行した場合に誤って32ビットJREを検出してしまうバグを修正しました。このバグはVersion 1.2.1でのJava9対応した際に発生したバグであるため、Version 1.2.0以前ではこのバグは発生しません。

Version 1.2.1 (2017/10/27)

  • レジストリからJava9のインストールパスを正しく検出できるようになりました。

Version 1.2.0 (2017/10/19)

  • リフレクションを使わずにJavaVM作成時にシステムクラスローダーを設定するようになりました。
  • ウィルス対策ソフトのウィルス誤検出対策としてリソース保持の構成を変更しました。
  • その他、細かいバグ修正をおこなっています。

Version 1.1.9 (2017/10/13)

  • Java 9 対応。
  • java.ext.dirs が廃止されたので外部ライブラリを java.class.path で指定するように変更しました。
  • Java 9 で不正なリフレクション操作が警告される(将来的には禁止される)ようになったのでシステム・クラスローダーの置き換えを廃止しました。

Version 1.1.8 (2017/10/09)

  • ターゲットバージョン指定のminorbuildの上位ビットが欠落するバグを修正しました。

Version 1.1.7 (2017/09/19)

  • ロードされるクラスにjava.security.ProtectionDomainを設定するようにしました。
  • ターゲットバージョン指定が正しく機能しないバグを修正しました。たとえば、Java 8u40 以上をターゲットにする場合は -t 1.8.0.40 を指定します。

Version 1.1.6 (2017/02/21)

  • 出力ファイル名に拡張子が含まれていないとクラッシュするバグを修正しました。
  • 実行ファイル名をVisualVMの表示名として設定するようにしました。

Version 1.1.5 (2017/02/01)

  • Pack200圧縮処理が復帰せずにフリーズしてしまうバグを修正しました。
  • 出力フォルダーが存在しない場合に再帰的にフォルダーを作成するようにしました。

Version 1.1.4 (2017/01/26)

  • ビルド環境を Windows Driver Kit 7.1 に変更しました。

Version 1.1.3 (2016/03/15)

  • サービスアプリケーションをSCM外から実行した場合にサービス開始・停止メッセージが出力されないようにしました。
  • サービスアプリケーションをSCM外から実行した場合に適用されるVM引数を個別に設定できるようにしました。

Version 1.1.2 (2016/01/03)

  • パッケージのspecTitle, specVersion, specVendor, implTitle, implVersion, implVendorをマニフェストファイルから設定するようにしました。
  • プロセスの環境変数を設定するユーティリティークラス exewrap.util.Environment を追加しました。

Version 1.1.1 (2015/07/28)

  • スレッドのコンテキスト・クラスローダーが設定されない不具合を修正しました。

Version 1.1.0 (2015/07/21)

  • このバージョンから対象JREのバージョンを 1.2以上 から 1.5以上 へ変更しました。
  • 一部のウィルス対策ソフトウェアのヒューリスティック検出でexewrap.exeがウィルスとして誤検出されてしまう問題へ対処しました。
  • JRE縮小機能を実験的に追加しました。
  • メインクラスを指定するオプション -M を追加しました。
  • JRE縮小機能を使用するためのトレースログを出力するオプション -T を追加しました。
  • アプリケーションと同じ場所にあるJREを検索しないようにする拡張フラグ NOSIDEBYSIDE を追加しました。
  • スレッドでキャッチされない例外が発生しても無視してアプリケーション実行を継続する拡張フラグ IGNORE_UNCAUGHT_EXCEPTION を追加しました。

Version 1.0.3 (2015/03/29)

  • jreフォルダだけでなくjreで始まるフォルダもJRE検索対象になりました。これにより、jre1.8.0_40のようなバージョン付きフォルダがJRE検索の対象になります。
  • 外部ライブラリディレクトリ(lib)のサブディレクトリも自動的に外部ライブラリディレクトリとして追加されるようになりました。
  • 複数のVM引数を指定した場合にアプリケーションがクラッシュする不具合を修正しました。

Version 1.0.2 (2015/01/15)

  • オプション -g を付けてx64アプリケーションを生成した場合にアプリケーションがクラッシュする不具合を修正しました。

Version 1.0.1 (2015/01/11)

  • サービス・アプリケーションのユーザー アカウント制御(UAC)による権限昇格に対応しました。

Version 1.0.0 (2014/08/15)

  • Cランタイムをスタティックリンクからダイナミックリンクに変更しました。
  • 引数バッファを破壊することがある不具合を修正しました。

Version 0.9.9 (2014/08/03)

  • x64アーキテクチャ(64-bit)の実行ファイルを生成できるようになりました。プログラムを64ビットJREで実行することができます。
  • exewrap.exe のビルド環境を MinGW(GCC)から Visual Studio 2013 に変更しました。

Version 0.9.8 (2014/07/31)

  • Windowsサービスでイベントログに出力するためのLoggerを追加しました。標準出力、標準エラー出力を使用せずに明示的なイベントログ出力が可能になります。
  • 依存JARライブラリのディレクトリを指定するためのオプション -L を追加しました。
  • 64ビットWindowsでJava実行環境を正しく検出できない不具合を修正しました。(ただし、exewrapはまだ64ビットJREに対応していません。64ビットWindowsに32ビットJREをインストールしておく必要があります。)
  • 拡張フラグSHAREを指定してプロセスを共有した場合に、GetJString関数、GetShiftJIS関数等で誤ったJVM環境(JNIEnv*)が使われる不具合を修正しました。

Version 0.9.7 (2014/07/21)

  • プロセス共有時の排他制御に関連する不具合を修正しました。
  • プロセス共有時のプロセス間通信の実装をDDEから共有メモリに変更しました。この変更に伴い拡張フラグDDE_CONNECTの名前をSHAREに変更しました。
  • Client VM / Server VM を選択する拡張フラグを追加しました。
  • Pack200アーカイブ形式を無効にするオプション -2 を追加しました。
  • EXEファイルのバージョン情報に会社情報を埋め込むためのオプション -C を追加しました。
  • EXEファイルのバージョン情報に製品名を埋め込むためのオプション -P を追加しました。
  • EXEファイルのバージョン情報に製品バージョンを埋め込むためのオプション -V を追加しました。