問題タブ [launch4j]
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.
windows-7 - 特定の名前の launch4j 実行可能ファイルが Windows UAC をトリガーする
Eclipseでlaunch4jのANTタスクを使用して、JavaプログラムのWindows実行可能EXEファイルを作成し、「MyApp.exe」という名前を付けています。Windows システムで管理者認証なしでこのプログラムを実行する必要があります。これまでのところ、これは機能します。UACプロンプトがなくても問題なく動作します。
しかし、launch4j ANT タスクでこの EXE の名前を「install.exe」、「setup.exe」、または「updater.exe」に変更すると、UAC アイコンが表示され (右下にプログラム アイコンが重なっています)、UAC プロンプトが表示されます。プログラムの開始 (Windows Vista または 7 のみ)。これは、Windows エクスプローラーでプログラムの名前を変更した場合にも発生します。
Windowsが昇格されたアクセス権(UAC)でプログラムを起動する原因となるファイル名にいくつかの「予約語」があるようです。
誰かがこの問題を確認できますか? アプリケーションに「install.exe」または「update.exe」という名前を付けることはできませんか?
java - Launch4jを使用して、いつジャーをラップする必要がありますか?
Launch4jは初めてです。デフォルトでは、jarを「ラップ」しますが、「jarをラップしないで、起動のみ」というチェックボックスがあります。
このチェックボックスはいつチェックする必要がありますか?このチェックボックスをオンにしないのはいつですか?
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 - Launch4j を使用して Java アプリケーションを Windows 7 タスクバーに固定する
現在、Java アプリケーションを Windows 7 タスクバーに固定しようとしています。アプリケーションはLaunch4jで起動されます。プログラム アイコンは正しく表示されますが、タスク バーのアイコンを右クリックすると、[ウィンドウを閉じる] というエントリを含むコンテキスト メニューしか表示されません。アプリケーションをタスクバーに固定するためのメニュー エントリはありません。EXE ファイルをタスクバーにドラッグしても、正しく動作しません。タスクバーでこの新しいランチャーをクリックすると、タスクバーに 2 つ目のアイコンが生成されます。
問題を解決するために、これら 2 つの質問に対する解決策の指示に従いましたが、役に立ちませんでした。
2 番目の質問/ソリューションの JNA はコンパイルされ、例外はスローされません。設定後にアプリIDを読み取ることができます。しかし、アプリケーションをタスクバーに固定することはまだできません。
問題を示す小さなテスト アプリケーションを Github で作成しました。
https://github.com/kayahr/launch4jtest
アプリケーションは、ビルド システムとしてMavenを使用します。実行するだけmvn package
で、ターゲット ディレクトリに ZIP ファイルが見つかります。この中には、EXE ファイルと、このアプリ ID を設定するために必要な jna.jar が含まれています。この ZIP を特定のディレクトリに解凍し、EXE をダブルクリックして、アプリケーションをタスクバーにピン留めしようとすると、問題が発生します。
では、このアプリケーションの何が問題なのですか?
java - launch4j を使用しているときに実行可能ファイルへのパスを取得するにはどうすればよいですか?
Windows アプリケーションで実行可能な jar ファイルをラップするために launch4j を使用していますが、JVM 引数を介してそのライブラリの一部への参照を渡す必要があります。問題のライブラリは、アプリケーションのインストール ディレクトリに存在し、実行可能ファイルに対して常に同じ場所にあります。
JVM オプションで実行可能な相対パスを使用するように launch4j に指示したいと思います。この情報が Windows バッチ スクリプト レベルで利用できることは知っていますが、launch4j をどのように設定して取得するのでしょうか?
明確にするために編集:パスを現在の作業ディレクトリに対して相対的にする方法ではなく、バイナリ自体に対して相対的にパスを作成する方法を特に探しています。両者は必ずしも同じではありません。
java - launch4j と maven を使用して Java コマンド ライン アプリケーションをラップする
Maven と launch4j を使用して、Java ベースのコマンド ライン アプリとそのすべての依存関係を単一の *.exe ファイルにラップしたいと考えています。
今、私はこれとこれのようなSOに関するすべての同様の質問を読みましたが、うまくいきません。
誰でも単純な pom.xml スニペットを提供できますか?必要なすべての依存関係でこれを実現する方法。ところで、Eclipse の実行構成でどの Maven ビルド目標を実行する必要がありますか?
SOからコピーしたものは次のとおりです。
Eclipse でlaunch4j:launch4jゴールを実行すると(これが正しい場合は?)、次のようになります。
プロジェクト インポーターでゴール org.bluestemsoftware.open.maven.plugin:launch4j-plugin:1.5.0.0:launch4j (default-cli) を実行できませんでした: ゴール org.bluestemsoftware.open.maven のパラメーター 'headerType'、'jre' .plugin:launch4j-plugin:1.5.0.0:launch4j が見つからないか無効です -> [ヘルプ 1]
たぶん、私は偽の目標を立ち上げているだけです...
java - Java 実行可能ファイル (launch4j を使用) を Windows 7 タスクバーに固定する
半日かけて探して、やっと諦めました。
実行可能なjarを作成するJavaアプリケーションがあります(他のライブラリを含めて、単一のjarファイルを作成するため)。launch4j と実行可能な jar を使用して、実行可能な "MyApp.exe" を作成しています。
実行可能ファイルは正常に動作していますが、Windows 7 のタスクバーに固定したいと考えています。今のところ、タスクバーのエントリは「ウィンドウを閉じる」だけです。
JNAで次のソリューションを読んで実装した後
私のアプリケーションは、GUIに「アプリケーションユーザーモデルID」を正しく表示します(テスト目的のみ)。
しかし、私のプログラムはタスク マネージャーで「javaw.exe」として表示され、launch4j オプションの「カスタム プロセス名と XP スタイル マニフェスト」を設定しても、タスクバーにピン留めできません。
背景情報: Windows 7 の管理者アカウントで作業していますが、アプリに管理者権限を要求したくありません。
とにかく、コンテキストメニューから「管理者として」アプリを起動し、UACメッセージを確認すると、タスクバーにピン留めできるようになりました。しかし、「アプリケーション ユーザー モデル ID」を適切に設定しても、プログラムが TaskManager で「MyApp.exe」として表示されているにもかかわらず、Windows は「javaw.exe」をピン留めしようとします。
私は完全に混乱しています。しかし、これらの問題を抱えているのは明らかに私だけではありません。=> 「 JNA を使用してアプリケーション識別子を取得/設定する」の Gregory Pakosz の回答に対する最後のコメントを参照してください。
最終的な質問:
- 「アプリケーションユーザーモデルID」(https://stackoverflow.com/a/1928830/1128689)を設定するためのJNAを使用したGregory Pakoszの方法は、私のために働いています。それでも、Windows は私のアプリを「javaw.exe」のインスタンスとして認識します。他に何をしなければなりませんか?
- いくつかのウィンドウまたは Java の更新により、ここで何かが壊れた可能性がありますか?
- 昇格されたユーザー権限でアプリを実行する必要がありますか? 本当にしたくない...
- launch4j に設定しなければならないオプションがいくつかありますか?
- launch4j でマニフェスト ファイルを使用する必要がありますか?
java - Launch4j jre 必須エラー
初めて launch4j を使用していますが、体系的なコンパイル エラーが発生します (OSX と Windows XP で同じです)。プロジェクトの xml ファイルは次のとおりです。
ここにWindows XPのログがあります:
マニフェストファイルでも試してみましたが、同じエラーが発生しました。私のjarが必要としないバンドルJREをlaunch4jが予期するのはなぜですか? あなたの助けは非常に高く評価されます