在Windows上设置Java进程名称

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (36)

我们的Java Swing应用程序在Windows上运行,并使用Launch4J封装在一个exe文件中。

我们希望自定义我们的应用程序进程名称和描述(在Windows的任务管理器中),因为它目前是“javaw.exe”“Java Platform SE binary”(这对我们的客户来说是令人困惑的)。

虽然老版本的Launch4J能够改变这种使用方式<customProcName>,但这个选项现在已经失效,因为它不再像Win7那样工作了。

是否有其他(简单)解决方法来定制我们的应用程序进程名称和说明?

例如,更改javaw.exe可执行文件名似乎是一种方法(因为我们将它嵌入到包装的exe文件中),但是如何指示launch4j jvm文件名更改?

另一个选择可能是创建一个启动程序exe文件:也许是一个矫枉过正的?

提问于
用户回答回答于

如果你能负担得起,JSmooth似乎可以满足你的需求。它最近在2007年发布。关于从应用程序本身获取的许可的说明:

生成的可执行文件(由JSmooth创建的启动程序)位于LGPL下,具有类似于gcc许可证异常的“运行时异常”:不需要您使用它分发源代码,也不需要发布提及jsmooth的通知。

使用JSmooth时,会有一个标有“Skeleton”的部分,允许您选择一些预定义的参数。其中之一是适用于GUI应用程序的“窗口包装”,描述如下:

这个框架包装了GUI应用程序

  • 没有显示控制台I / O
  • 如果找不到Java虚拟机,它可以显示一个可配置的URL(通常是一个Java下载页面)。

可以将参数传递给应用程序(使用JSmooth默认参数机制或使用参数创建快捷方式)。

这个框架中的重要事情是检查选项“在exe进程中启动java应用程序”,这会导致在与wrapper exe相同的进程中运行JVM。这意味着只有exe被显示在Windows任务管理器中,而不是exe和java进程。

另一种方法是编写自己的包装器。请参阅此Oracle指南以了解如何从本机应用程序调用JVM。

用户回答回答于

如果想要推出您自己的解决方案,那么您将需要查看JNI以及特别用于创建VM 的调用APIJNI_CreateJavaVM(),找到主要方法GetStaticMethodID()并使用它调用它CallStaticVoidMethod

这是什么java.exejavaw.exe以及各种其他本地发射器的内部完成。一些例子包括:

  • OpenJDK java.c
  • IntelliJ WinLauncher.cpp
  • WinRun4J VM.cpp

如果你不想将一个本地构建系统与你的java构建系统集成,一种方法是launcher.exe事先构建一个静态,并将其视为一个静态二进制blob。然后在你的java版本中,使用java修改二进制blob,更新VERSIONINFO,图标和启动画面。这种方法的一个例子可以在IntelliJ LauncherGeneratorMain.java中看到

扫码关注云+社区