在Windows上设置Java进程名称

Tom*_*Tom 17 java windows swing

我们的Java Swing应用程序在Windows上运行,并使用Launch4J包装在exe文件中.

我们想要自定义我们的应用程序进程名称和描述(在Windows的任务管理器中),因为它当前是"javaw.exe""Java Platform SE binary"(这对我们的客户来说很困惑).

虽然旧版本的Launch4J可以使用<customProcName>此更改,但此选项现已不存在,因为它不再适用于Win7.

是否有其他(简单)解决方法来自定义我们的应用程序进程名称和描述?

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

另一个选择可能是创建一个启动器exe文件:可能是一个矫枉过正?

任何想法/提示都非常受欢迎; 谢谢!

use*_*670 8

如果您正在寻找自己的解决方案,那么您将需要查看JNI和特别是用于创建VM 的Invocation APIJNI_CreateJavaVM(),找到main方法GetStaticMethodID()并使用它来调用它CallStaticVoidMethod.

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

如果您不希望将本机构建系统与Java构建系统集成,则一种方法是launcher.exe提前构建静态,并将其视为静态二进制blob.然后在java构建期间,使用java修改二进制blob,以更新VERSIONINFO,图标和启动画面.可以在IntelliJ LauncherGeneratorMain.java中看到此方法的示例

  • @JörnHees谢谢.很清楚语法; 发布多个链接需要声誉,这是匿名帐户所没有的. (2认同)

man*_*uti 5

如果您负担得起,JSmooth似乎可以满足您的需求。它最后一次发布是在2007年。有关从应用程序本身获取的许可证的说明:

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

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

该框架包装了GUI应用程序

  • 没有显示控制台I / O
  • 如果未找到Java VM,它将能够显示可配置的URL(通常到Java下载页面)。

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

此框架中的重要内容是检查“在exe进程中启动java应用程序”选项,该选项导致在与包装exe相同的进程中运行JVM。这意味着Windows任务管理器中仅显示exe,而不是exe和java进程。

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