【问题标题】:Set Java process name on Windows在 Windows 上设置 Java 进程名称
【发布时间】:2015-05-24 20:53:59
【问题描述】:

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

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

虽然较早版本的 Launch4J 可以使用 <customProcName> 更改此设置,但此选项现已失效,因为它在 Win7 中不再起作用。

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

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

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

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

【问题讨论】:

标签: java windows swing


【解决方案1】:

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

这就是java.exejavaw.exe 和其他各种本地启动器在内部所做的。一些例子包括:

如果您不想将原生构建系统与您的 java 构建系统集成,一种方法是预先构建一个静态的launcher.exe,并将其视为静态二进制 blob。然后在您的 java 构建期间,使用 java 修改二进制 blob,以更新 VERSIONINFO、图标和启动屏幕。这种方法的一个例子可以在IntelliJ LauncherGeneratorMain.java

中看到

【讨论】:

  • 欢迎来到stackoverflow。我修复了你答案中的链接,也许看看这个:stackoverflow.com/editing-help#basic-links
  • @JörnHees 谢谢。熟悉语法;发布多个链接需要声誉,而匿名帐户则没有。
【解决方案2】:

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

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

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

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

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

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

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

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

【讨论】:

    【解决方案3】:

    我对@9​​87654321@ 做了类似的事情,据我所知,它可以用于商业用途,因为它是 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
    

    【讨论】:

      【解决方案4】:

      这似乎很老了,并不值得付出努力,但它也可能是您正在寻找的东西:Java exe Maker

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-11-06
        • 1970-01-01
        • 2014-11-15
        • 1970-01-01
        • 2012-07-27
        • 2014-07-11
        • 1970-01-01
        相关资源
        最近更新 更多