29

半日かけて探して、やっと諦めました。

実行可能な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 の回答に対する最後のコメントを参照してください。

最終的な質問:

  1. 「アプリケーションユーザーモデルID」(https://stackoverflow.com/a/1928830/1128689)を設定するためのJNAを使用したGregory Pakoszの方法は、私のために働いています。それでも、Windows は私のアプリを「javaw.exe」のインスタンスとして認識します。他に何をしなければなりませんか?
  2. いくつかのウィンドウまたは Java の更新により、ここで何かが壊れた可能性がありますか?
  3. 昇格されたユーザー権限でアプリを実行する必要がありますか? 本当にしたくない...
  4. launch4j に設定しなければならないオプションがいくつかありますか?
  5. launch4j でマニフェスト ファイルを使用する必要がありますか?
4

4 に答える 4

1

Jsmoothよりも新しく使いやすいwinrun4jでも問題ありません。

于 2012-08-22T19:16:20.407 に答える
1

JSmoothの助けを借りて実行可能な jar から Exe を作成することで、これを機能させまし た。タスクバーにピン留めし、問題なく実行しました。

お役に立てれば

于 2012-04-05T07:47:05.633 に答える
1

根本的な原因:javawホスト プロセスとして (Windows のレジストリに) 登録されています。ショートカットの動作は、次のことが原因である可能性があります (出典: Application User Model IDs (AppUserModelIDs) )

アプリケーション定義およびシステム定義の AppUserModelID

一部のアプリケーションは、明示的な AppUserModelID を宣言しません。それらはオプションです。その場合、システムは一連のヒューリスティックを使用して、内部 AppUserModelID を割り当てます。

[...]

起動引数 (通常は「アプリケーション」としてホストするターゲット コンテンツ) を含むショートカットを介してプロセスが起動された場合、システムは ID を特定し、アプリケーションをピン留めして再起動できます。

ホスト プロセスの動作について:

アプリケーションをホスト プロセスとして登録する

アプリケーションは IsHostApp レジストリ エントリを設定して、その実行可能ファイルのプロセスがタスクバーによってホスト プロセスと見なされるようにすることができます。これは、そのグループ化と既定のジャンプ リスト エントリに影響します。

于 2013-08-23T17:25:46.383 に答える
0

Windowsタスクバーで実行中のJavaアプリケーションを表示するためにアプリケーションで使用したこれを探していますか..

SystemTray systemTray = new SystemTray(composite, parent.getShell(), parent.getDisplay(), "My Application");
systemTray.makeSystemTray();
于 2012-04-23T11:00:33.820 に答える