29

经过半天的搜索和尝试,我终于放弃了。

我有一个 java 应用程序,我创建了一个可运行的 jar(包括任何其他库并且只有一个 jar 文件)。使用 launch4j 和可运行的 jar,我正在制作一个可执行文件“MyApp.exe”。

可执行文件工作正常,但我想将它固定到我的 Windows 7 任务栏。现在,我只有任务栏条目“关闭窗口”。

在阅读并使用 JNA 实施以下解决方案之后

我的应用程序在 gui 中正确显示它的“应用程序用户模型 ID”(仅用于测试目的)。

但是:我的程序在任务管理器中显示为“javaw.exe”,我仍然无法将其固定到任务栏,即使我设置了 launch4j 选项“自定义进程名称和 XP 样式清单”。

背景信息:我正在使用 Windows 7 管理员帐户,我不希望该应用程序需要管理员权限。

无论如何,如果我从上下文菜单“以管理员身份”启动应用程序并确认 UAC 消息,我现在可以固定到任务栏。但是:即使我正确设置了“应用程序用户模型 ID”,Windows 仍然想要固定“javaw.exe”,即使我的程序现在在 TaskManager 中显示为“MyApp.exe”。

我完全糊涂了。但我显然不是唯一一个遇到这些问题的人。=> 请参阅使用 JNA 获取/设置应用程序标识符中对 Gregory Pakosz 答案的最后评论

最后的问题:

  1. Gregory Pakosz 使用 JNA 设置“应用程序用户模型 ID”(https://stackoverflow.com/a/1928830/1128689)的方式对我有用。但是,Windows 仍将我的应用程序识别为“javaw.exe”的实例。我还需要做什么?
  2. 也许某些 Windows 或 Java 更新在这里破坏了某些东西?
  3. 我真的必须以提升的用户权限运行我的应用程序吗?我真的不想...
  4. launch4j 中是否还有一些我必须设置的选项?
  5. 我必须在 launch4j 中使用清单文件吗?
4

4 回答 4

1

winrun4j也没有问题,它比 Jsmooth 更新且更易于使用

于 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。

[...]

如果进程是通过包含启动参数的快捷方式启动的(通常是作为“应用程序”托管的目标内容),则系统可以确定身份并且可以固定并重新启动应用程序。

关于主机进程行为:

将应用程序注册为主机进程

应用程序可以设置 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 回答