問題タブ [winrun4j]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Windows 7でJavaアプリケーションを起動するための最良の方法は何ですか?
要件
Windows7でJavaGUIアプリケーションを公開したい。このアプリケーションはSwingToolkitを使用しており、ネイティブコードは必要ありません。アプリケーションは、NSISインストーラーを使用してインストールされます。このアプリケーションをできるだけWindows7に統合したいと思います。これの意味は:
- アプリケーションの実行中は、アプリケーションをタスクバーに固定できる必要があります。
- Windowsがこれらのファイルをアプリケーションで開くように、データファイルをアプリケーションに関連付けることができる必要があります。
- 32ビットのJavaランタイムと64ビットのJavaランタイムで自動的に動作する必要があります。したがって、ユーザーが32ビットJavaをアンインストールし、代わりに64ビットJavaをインストールした場合(またはその逆)、アプリケーションは引き続き機能する必要があります。
- Windowsの大きなフォント設定をサポートする必要があります。私はこの機能を本当に理解していません。一部のアプリケーションはそれを完全に無視し、他のアプリケーション(Google Chromeのように)はピクセルスケール(本当に醜いように見えます)であり、他のアプリケーションは意図したとおりに大きなフォントを使用するだけでそれをサポートします(それは私が望むものであり、通常は機能します。WinRun4Jソリューションのみ下記はそれでは動作しません)。
テスト済みのソリューション
WinRun4J
WinRun4jは、Javaアプリケーションを起動するEXEファイルです。アプリケーションは新しいJavaプロセスをフォークしないため、WindowsはEXEファイルがアプリケーションであると見なします。したがって、タスクバーに問題はありません。ファイルはEXEファイルに簡単に関連付けることができるため、ファイルの関連付けは機能します。
問題:
- 大きなフォントはサポートしていません。代わりに、アプリケーションウィンドウはピクセルスケールになります(Google Chromeのように)。
- インストールされているJREに応じて、2つの異なるEXEファイルを使用する必要があります。したがって、64ビットJREをインストールする場合は、64ビットEXEファイルを使用してアプリケーションを起動する必要があります。32ビットのJREがインストールされている場合は、他のEXEを使用する必要があります。32ビットのJREのみがインストールされているのに、64ビットのオペレーティングシステムで32ビットのEXEを使用する必要がある理由をユーザーが理解していないため、これはユーザーフレンドリーではありません。
Launch4J
Launch4Jは、外部Javaプロセスを起動してJavaアプリケーションを起動する32ビットEXEを作成します。したがって、WinRun4Jとは異なり、64ビットJavaを起動することもできます。
問題:
- アプリケーションをタスクバーに固定できません。
System.out.println
headerType="gui"
アプリケーションがコンソールから起動されているかどうかに関係なく、の場合はコンソールに出力されません。
JAR
Windowsでは、JARファイルをダブルクリックするだけでアプリケーションを起動できます。インストールされたJREは重要ではなく、単に機能します。だが...
問題:
- アプリケーションをタスクバーに固定できません。
- スタートメニューにショートカットを作成できません。
- ファイルをJARファイルに関連付けることはできません。
BAT / CMD
このような単純なバッチファイルを使用して、アプリケーションを起動できます。
このバッチファイルのショートカットを作成して、カスタムアイコンを設定できます。
問題:
- アプリケーションの起動時にDOSウィンドウがポップアップします。
- バッチファイルは、javaw.exeがどこにあるかを知りません。インストールされているJavaバージョン(32ビットまたは64ビット)によっては、
c:\windows\syswow64
代わりに配置される場合があり、Windowsはバッチファイルからのこの呼び出しを自動的にリダイレクトしません。JAVA_HOME
Javaはこれを自動的に設定しないため、環境変数を使用することもできません。 - ファイルをバッチファイルに関連付ける場合、カスタムアイコンを設定することはできません。
- タスクバーのサポートが正しく機能していません。バッチファイルを手動で開始するとアプリケーションを固定できますが、代わりに関連ファイルをダブルクリックすると機能しません。
ショートカット
バッチファイルを使用する代わりに、アプリケーションを起動するためのショートカットのみを作成することができます。このコマンドにリンクしています:c:\windows\system32\javaw.exe -jar "c:\program files\myapp\myapp.jar"
。32ビットのJavaJREがインストールされている場合、Windowsはこの呼び出しをSysWOW64ディレクトリに自動的にリダイレクトします。
問題:
- WindowsはEXE/COM / PIF / BAT / CMDファイルのみを関連付けターゲットとして受け入れるため、ファイルを関連付けることはできません。LNKファイルは機能しません。
質問
上記のすべての要件を満たす別のソリューションはありますか?または、言及された解決策の問題を解決するためのトリックはありますか?
解決
Launch4jを使用してタスクバーの固定の問題を解決した後、最良の解決策のように見えます。Launch4jは(このプラグインまたはこのプラグインを使用して)Mavenプロジェクトに簡単に統合でき、構成は非常に簡単で、タスクバーの固定を除いてすべてがすぐに機能します。タスクバーを固定するには、この質問への回答で説明されているように、JavaアプリケーションでappModelUserIdを設定する必要があります。
さらに、Javaアプリケーションは、EXEを指すショートカットを少なくとも1つインストールする必要があるインストーラーによってインストールされる必要があります。このショートカットには、appModelUserIdも含まれている必要があります。NSISでは、これはWinShellプラグインと次のような構成で実行できます。
何らかの理由で、このショートカットが存在する必要があるだけです。使用する必要はありません。EXEをダブルクリックしても、タスクバーの固定は引き続き機能します。アプリケーションフォルダのサブフォルダにショートカットを作成することもできます。EXEファイルの最後のショートカットが削除されると、タスクバーの固定が機能しなくなります。
java - Windows上のJava用の32ビット/64ビットexeラッパーの問題
winrun4j java exeラッパーのiniファイルで、要件としてJava7を指定するようにvm.version.min=1.7を設定しました。しかし、それを実行したとき、コマンドラインからのjava -versionがそれを返したにもかかわらず、私がjava7jreがインストールされていることをwinrun4jに認識させることができませんでした。
さらに調査したところ、Java 7のインストールは64ビットであるのに対し、Java6のインストールは32ビットであることがわかりました。次に、winrun4jには64ビットバージョンのコマンド(つまり、rcedit64)があることがわかりました。appname.exeではなくappname64.exeを作成した場合、Java7についての不満はなくなりました。
- だから誰かがこれが64ビットjvmを実行するために64ビットexeが必要な問題であったことを確認できますか
- 次に、これがユーザーにどのように提示するかという場合、インストーラーをexeとしてラップしているので、installer.exeとinstaller64.exeの両方をユーザーに提供し、ユーザーに説明する必要があります。プロセッサではなく、インストールされているJavaのバージョンに基づいて適切なものを選択する32ビットまたは64ビット)
編集:物事は私が説明した通りのように聞こえます、そしてlaunch4jを使用することはおそらく解決策です
java - インストーラーとアプリケーション用に JRE を WInrun4j に 1 回だけ埋め込む
Windows デスクトップ アプリケーションのインストールでは、izpack を使用してインストーラーを作成し、winrun4j を使用して exe から呼び出します。また、izpack インストールの一部として、インストール後にアプリケーションを実際に実行するための別の winrun4j ラッパーを追加します。
問題は、win4runj.exe が機能するには正しい Java タイプを使用する必要があることです。つまり、exe が 64 ビットの場合は 64 ビットの jvm を実行する必要があり、exe が 32 ビットの場合は 32 ビットの jvm を実行する必要があります。これはユーザーを混乱させる可能性があるため、winrun4j を利用して組み込みの jvm を使用し、2 つのダウンロードを利用できるようにしました。
- widgetinstaller.exe (32 ビット)
- widgetinstaller64.exe (64 ビット)
しかし、私の混乱は、ダウンロードごとにjvmを1回だけ埋め込みたいのですが、2つのexe(インストーラーとプログラム自体)があるため、これを行う方法がわからないということです。これを行うことができますか?
アップデート
JVM を 2 回インストールすると機能します (一度は izpack でビルドしたときに install.jar に含まれ、一度は zip ファイルに追加されるため、widgetinstaller.exe で使用できます)。
- widgetinstaller.exe は c:\code\widget\installer にあります。
- Oracle から 32 ビット jre をダウンロードします。
- c:\code\widget\32bitJVM にインストールします
- izpack.xml を編集して追加
<file src="C:/code/widget/JVM32bit" targetdir="$INSTALL_PATH"/>
- インストーラー vm.location=32bitJVM/bin/client/JVM.dll を c:\code\widget\installer\widgetinstaller.ini に追加します。
- ウィジェット自体に vm.location=../32bitJVM/bin/client/JVM.dll を c:\code\widget\widget.ini に追加します。
- コードを再構築し、zip ファイルに 32bitJVM を含めて圧縮し、widgetinstaller.zip を作成します (これには、32bitJVM、widgetinstaller.ini、widgetinstaller.exe、widgetinstaller.ico、および install.jar が含まれます)。
- widgetinstaller.exe を解凍し、ダブルクリックしてインストールします。
しかし、JVM が必要なのは 1 回だけです。izpack.xml から削除する必要があることはわかって<file src="C:/code/widget/JVM32bit" targetdir="$INSTALL_PATH"/>
いますが、32bitJVM をプログラム インストール フォルダーにコピーするにはどうすればよいですか?
その同じ JVM をプログラム フォルダに保存する必要があります。
これは izpack 自体の外で行う必要があるようですか?
編集
しかし、パスに何を設定する必要があるかは非常に混乱します。ドキュメントは、相対リンクhttp://izpack.org/documentation/installation-files.html#the-packs-element-packsを挿入することを誤って暗示しています。
例
izpack install.xml は C:\code\Widget\installer にあります
パッケージをアップする場合、izpack のインストールには次のものが必要です。
java - izpackによってビルドされたinstall.jarの一部でなくても、Izpack5を使用してファイルをインストールできますか?
インストールwidget.zipzipファイルには次のものが含まれています。
- 32bitJava
- install.jar
- widgetinstaller.exe
- widgetinstaller.ini
- widgetinstaller.ico
要約する:
- 32bitJavaは、Oracleからダウンロードされた32ビットJREです。
- install.jarは、Izpackによって作成されたインストーラーです。
- widgetinstaller。*は、インストーラーにexeラッパーを提供するwinrun4jによって作成されます。
したがって、このセットアップを使用すると、ユーザーがJavaランタイムをインストールしていなくてもアプリケーションをインストールできます。
ただし、インストールすると、実際のアプリケーションを実際に実行するにはJavaランタイムも必要になります。したがって、現時点では、32bitJavaのコピーがizpackインストールの一部として含まれています。つまり、install.jarに存在し、インストール時にインストールされます。
ただし、これは、JVMのコピーが2つあることを意味します。また、32bitJavaは実際のアプリケーションよりも大きいため、ダウンロードが非常に大きくなります。
では、install.jarに含める代わりに、インストール中/インストール後に32bitJavaフォルダーをインストールにコピーするにはどうすればよいですか?
java - Izpack が「ファイル拡張子 ".js" のスクリプト エンジンがありません」で失敗し、
Izpack 5 Beta 11 を使用するテスト マシンで、バンドルされた 64 ビット Java を実行する 64 ビット winrun4j exe を使用して install.jar を起動すると、Izpack が文句を言う
There is no script engine for file extension ".js"
、次に不平を言いThe installer could not launch with administrator permissions
、管理者権限がないため、デフォルトのインストール ディレクトリにインストールしようとすると失敗します。C:/Program Files 以外の別のフォルダへのインストールは問題なく完了します。
一方、32ビットJavaを実行している32ビットwinrun4jインストーラーで実行すると、正常に動作します。
exeラッパーなしでinstall.jarを直接実行した場合
つまり、java -jar install.jar
32 ビット JVM と 64 ビット JVM の両方を使用すると、これらのエラーが発生します。
そのため、現時点で唯一有効な解決策は、32 ビット exe ラッパーを使用したインストールですが、64 ビット ラッパーも必要です。
だから質問は
- 32 ビット exe が機能し、64 ビット exe が機能しない理由
- ラッパーなしでインストールしようとすると、32 ビットまたは 64 ビットのどちらもインストールされないのはなぜですか。
ファローアップ
javascript エラー (Izpack ではない) に関するこのスレッドを見つけたところ、ほとんどのファイル タイプの編集に使用するエディターである Utlradedit に .js ファイルが関連付けられていることがわかりました。
.js と Ultraedit の関連付けを解除するだけで、実行時に
- java -jar install.jar 32 ビットの Java を 32 ビットの install.jar で使用
- java -jar install.jar 64 ビットの Java を 64 ビットの install.jar で使用
- 32 ビットの winrun4j ラッパー。
それは今動作します:)
しかし、64ビットのwinrun4jはインストールの開始に失敗し、まったく機能しません.コマンドウィンドウから実行すると、代わりにそれを見ることができます
ランニングの
彼らは走りました
したがって、フォローアップの質問は次のとおりです。
- ファイルタイプをエディターに関連付けるだけで、この JavaScript が機能しなくなるのはなぜですか。これまたは同様の問題が多くのユーザーに影響を与える可能性があると想像できます。
- 64 ビット ラッパーから実行すると、installer.js が Abort Exit を実行するのはなぜですか?
java - winrun4jでコンソールウィンドウが表示されないようにする方法
JavaでデスクトップGUIアプリを作成し、WinRun4Jを使用してネイティブWindowsランチャーを作成しました。
私のiniファイルは次のようになります
コンソールログをオフにしましたが(log.level = none)、とにかく追加のコンソールウィンドウが表示され続けます(スクリーンショットで赤でマークされ、アプリのウィンドウがバックグラウンドで表示されます)。それを防ぐ方法は?
java - winrun4j によって作成された Windows サービスのメソッドを呼び出す
WinRun4J を使用して jar ファイルから Windows サービスを作成しましたが、これは非常に基本的なものです。
サービスが開始されると、ルートフォルダーにあるresult.txtに数秒ごとに書き込みを続けます..(WinRun4Jを試すためだけに)
ここで私の質問は、このようにサービス jar でメソッドを実行できますか?
次に、システム上の別の Java ファイルからこのメソッドを呼び出します。
WriteToFile は、いくつかの引数を指定して書き込みを呼び出すことになっています。
出来ますか?もしそうなら、どのように?
これの全体的な目的は、GUI を介してメソッドを呼び出すことができるサービスを実行することです。
java - WinRun4J サービスの例が実行されない
WinRun4J サービス サンプル(ソフトウェアと共に配布される ServiceTest クラス) を実行する方法を知っている人はいますか? 私は64ビットのWindows 7ボックスを使用しており、Java 7 JDKとJREがインストールされています。
私は以下を実行しました:
- にコピー
WinRun4J64c.exe
されC:\test
、名前が変更されましたservice64.exe
service.ini
C:\test にコピーし、名前を変更しましたservice64.ini
- 最後に、 にコピー
WinRun4JTest.jar
しましたC:\test
。
まず、管理者としてコマンド プロンプトを実行する必要があります。そうしないと、サービスを登録できません。そのため、管理者として開いたコマンド プロンプトで、次のコマンドを入力しました。
ここまでは順調ですね。しかし、サービスを開始するために Windows サービス パネルに移動すると、次のエラーが表示されます。
「エラー 1053: サービスが応答しませんでした ... タイムリーに」
何か案は?
ありがとう
java - WinRun4J-ライブラリjarをロードできません
WinRun4Jを使用してJavaプログラムをWindowsサービスとして実行しようとしています。サービスは正しく作成され、ClassNotFoundExceptionが原因で停止するまで実行されます。
WinRun4Jがlibフォルダーにあるlibjarをロードしていないのではないかと思います。私のアプリケーションの作業ディレクトリは次のようになります。
メインのアプリケーションjarはbinフォルダーにあり、他のjarはlibフォルダーにあります。これは、WinRun4Jで使用される私のservico.iniファイルです。
classpath.2で多くのバリエーションを試しましたが、成功しませんでした。
私が間違っているのは何ですか?
java - WinRun4Jを使用してJavaアプリケーションをWindowsサービスとして実行する方法
WinRun4Jを使用してJavaアプリケーションをWindowsサービスとして実行しようとしています。
WinRun4J64c.exeをアプリケーションディレクトリにコピーし、次のservice.iniファイルを横に配置しました。
しかし、次のようにサービスを開始すると、次のWinRun4J64c.exe --WinRun4J:RegisterService
ようになります。
なにが問題ですか?