我们的Java Swing应用程序在Windows上运行,并使用Launch4J封装在一个可执行文件中。
我们希望自定义我们的应用程序进程名称和描述(在Windows的任务管理器中),因为它当前是"javaw.exe“和"Java Platform SE binary”(这让我们的客户感到困惑)。
虽然旧版本的Launch4J启用了使用<customProcName>
来更改这一点,但此选项现在已失效,因为从Win7开始它不再起作用。
有没有其他(简单的)变通方法来定制我们的应用程序进程名称和描述?
例如,更改jvm可执行文件名似乎是一种方法(因为我们将其嵌入到封装的exe文件中),但是如何向launch4j表明javaw.exe文件名已更改?
另一种选择是创建一个启动程序exe文件:也许是过度杀伤力?
任何想法/提示都非常受欢迎;谢谢!
发布于 2015-06-05 23:31:06
如果您希望推出自己的解决方案,您将需要查看JNI和Invocation API,特别是用于创建VM的JNI_CreateJavaVM()
,找到主方法GetStaticMethodID()
并使用CallStaticVoidMethod
调用它。
这就是java.exe
、javaw.exe
和其他各种本机启动器在内部所做的事情。一些示例包括:
如果您不想将本机构建系统与java构建系统集成在一起,一种方法是预先构建一个静态launcher.exe
,并将其视为静态二进制blob。然后,在java构建期间,使用java修改二进制blob,以更新VERSIONINFO、图标和闪屏。这种方法的一个示例可以在IntelliJ LauncherGeneratorMain.java中看到
发布于 2015-05-30 22:21:28
如果你负担得起,JSmooth似乎能满足你的需求。不过,它上一次发布还是在2007年。关于它的许可证取自应用程序本身的说明:
生成的可执行文件(由jsmooth创建的启动器)在LGPL下,有一个类似于gcc许可例外的“运行时例外”:它不要求您随同它分发源代码,也不要求您发布一则提到jsmooth的通知。
当使用JSmooth时,有一个标记为“骨架”的部分,允许您选择一些预定义的参数。其中之一是适用于GUI应用程序的“窗口包装器”,如下所述:
此框架包装了图形用户界面应用程序。
可以将参数传递给应用程序(使用JSmooth默认参数机制,或者使用参数创建快捷方式)。
此框架中的重要内容是选中选项"Launch java app in the exe process“,这将导致在与包装器exe相同的进程中运行JVM。这意味着在Windows任务管理器中只显示exe,而不是exe和java进程。
另一种方法是编写自己的包装器。有关如何从本机应用程序调用this Oracle guide的信息,请参阅JVM。
发布于 2015-05-31 01:36:37
我用WinRun4J做过类似的事情,据我所知,它可以用于商业,因为它是CPL许可的。今天检查一下:设置进程名在Windows7上仍然有效(最初是在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
https://stackoverflow.com/questions/30428225
复制相似问题