在 Windows 上设置 Java 进程名称

2022-09-02 13:30:49

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

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

虽然较旧版本的 Launch4J 启用了 更改此功能,但此选项现已失效,因为它从 Win7 开始不再工作。<customProcName>

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

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

另一种选择可能是创建一个启动器exe文件:也许是过度的?

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


答案 1

如果您希望推出自己的解决方案,则需要查看 JNI,特别是用于创建 VM 的调用 API,找到主方法并使用 调用它。JNI_CreateJavaVM()GetStaticMethodID()CallStaticVoidMethod

这就是 和各种其他原生发射器在内部所做的。一些示例包括:java.exejavaw.exe

如果不想将本机生成系统与 Java 生成系统集成,则方法是提前生成静态,并将其视为静态二进制 blob。然后在 Java 生成期间,使用 java 修改二进制 blob,以更新 VERSIONINFO、图标和初始屏幕。这种方法的一个例子可以在IntelliJ LauncherGeneratorMain中看到.javalauncher.exe


答案 2

如果你能负担得起,JSmooth似乎会做你需要的。不过,它最后一次发布是在2007年。关于其许可证的说明取自应用程序本身:

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

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

此框架包装 GUI 应用程序

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

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

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

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


推荐