经过半天的搜索和尝试,我终于放弃了。
我有一个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答案的最后评论最后的问题:
答案 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注册表项导致该可执行文件的进程 被任务栏视为主持人进程。这会影响其分组 和默认的跳转列表条目。