将Java可执行文件(使用launch4j)固定到Windows 7任务栏

时间:2012-03-28 15:16:55

标签: java windows-7 jna taskbar launch4j

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

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

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

阅读并使用JNA实现以下解决方案

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

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

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

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

我完全糊涂了。但我显然不是唯一一个有这些问题的人。 =>请参阅Using JNA to get/set application identifier

中对Gregory Pakosz答案的最后评论

最后的问题:

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

4 个答案:

答案 0 :(得分:1)

我通过在JSmooth的帮助下从一个可运行的jar创建一个Exe来实现这一点 将它打印到任务栏,并毫无问题地运行它。

希望这有帮助

答案 1 :(得分:1)

您是否在寻找这个,我在我的应用程序中使用它来在Windows任务栏上显示正在运行的Java应用程序..

SystemTray systemTray = new SystemTray(composite, parent.getShell(), parent.getDisplay(), "My Application");
systemTray.makeSystemTray();

答案 2 :(得分:1)

winrun4j也没问题,比Jsmooth

更新,更容易使用

答案 3 :(得分:1)

根本原因:javaw被注册为主机进程(在Windows的注册表中)。快捷方式行为可能是由以下(来源:Application User Model IDs (AppUserModelIDs)

引起的
  

应用程序定义和系统定义的AppUserModelIDs

     

某些应用程序未声明显式的AppUserModelID。他们是   可选的。在这种情况下,系统使用一系列启发式方法   分配内部AppUserModelID。

     

[...]

     

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

关于主机进程行为:

  

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

     

应用程序可以设置   IsHostApp注册表项导致该可执行文件的进程   被任务栏视为主持人进程。这会影响其分组   和默认的跳转列表条目。