Our Java Swing application is running on Windows and wrapped in an exe file using Launch4J.
We would like to customize our application process name and description (in Windows' task manager) as it is currently "javaw.exe" and "Java Platform SE binary" (which is confusing for our customers).
While older versions of Launch4J enabled to change this using <customProcName>
, this option is now defunct as it is not working anymore as of Win7.
Is there any other (simple) workaround to customize our application process name and description?
For instance, changing javaw.exe executable filename seems like an approach (as we embed it in the wrapped exe file) but how then indicate to launch4j that the jvm file name changed?
Another option could be to create a launcher exe file: maybe an overkill?
Any ideas / hints are more than welcome; thanks!
答案 0 :(得分:8)
如果您希望推出自己的解决方案,那么您将会想要查看JNI以及用于创建VM的Invocation API JNI_CreateJavaVM()
,找到主要方法GetStaticMethodID()
并使用CallStaticVoidMethod
调用它。
java.exe
,javaw.exe
和其他各种原生发射器在内部执行此操作。一些例子包括:
如果您不希望将本机构建系统与您的java构建系统集成,则一种方法是提前构建静态launcher.exe
,并将其视为静态二进制blob。然后在java构建期间,使用java修改二进制blob,以更新VERSIONINFO,图标和启动画面。在IntelliJ LauncherGeneratorMain.java
答案 1 :(得分:5)
如果你负担得起,JSmooth似乎可以做你需要的。它最后一次发布于2007年。关于从应用程序本身获取许可证的说明:
生成的可执行文件(JSmooth创建的启动程序)位于LGPL下,运行时异常&#34;类似于gcc许可证例外:您不需要使用它来分发源代码,也不需要发布提及jsmooth的通知。
使用JSmooth时,会有一个标有&#34; Skeleton&#34;的部分。允许您选择一些预定义的参数。其中一个是&#34; Windowed Wrapper&#34;适用于GUI应用程序,如下所述:
此骨架包含 GUI应用程序。
- 未显示控制台I / O
- 如果找不到Java VM,则可以显示可配置的URL(通常是java下载页面)。
可以将参数传递给应用程序(使用JSmooth默认参数机制,或使用参数创建快捷方式)。
这个框架中最重要的是检查选项&#34;在exe进程中启动java应用程序&#34;这导致在与包装器exe相同的进程中运行JVM。这意味着只有exe在Windows任务管理器中显示,而不是exe和java进程。
另一种方法是编写自己的包装器。有关如何从本机应用程序调用JVM,请参阅this Oracle guide。
答案 2 :(得分:4)
我使用WinRun4J做了类似的事情,据我所知,它可以在商业上使用,因为它是CPL许可的。今天检查过:使用Windows 7设置进程名称仍然有效(最初在XP上执行此操作)。
根据网站,您只需创建一个ini文件,告诉WinRun4J运行什么:
main.class=org.something.MyMainClass
classpath.1=*.jar
(还有更多参数,您可以设置可以找到JRE的位置等)
在第二步中,将winrun4j.exe复制到适合您应用程序的内容:
copy winrun4j.exe yourapplication.exe
(还有适用于Windows x64的版本)
然后你有RCEDIT(WinRun4j附带)将ini添加到exe:
rcedit /N yourapplication.exe yourapplication.ini
答案 3 :(得分:2)
这看起来很旧,并不值得付出努力,但它也可能是您正在寻找的:Java exe Maker。