Java中的Spawn过程,类似于双击

Posted

技术标签:

【中文标题】Java中的Spawn过程,类似于双击【英文标题】:Spawn process in Java, similar as double-click 【发布时间】:2013-09-16 15:28:04 【问题描述】:

我有一个 Java 应用程序,我想生成一个新进程(启动一个 .bat 文件),它的作用基本上与双击它相同。

我已经尝试了Runtime.getRuntime().exec()ProcessBuilder 以生成该进程。这两种方法都有效(它们可以启动 .bat 文件),但我的问题是它们实际上并没有做与双击它完全相同的事情。

更具体地说,这个 .bat 文件启动了一个 JVM (java.exe MyMainClass),它被配置为使用 Windows SxS(并排)运行。因此,我创建了适当的 java.exe.configjava.exe.manifest 文件。当我双击它时,java 应用程序启动并成功加载了相应的 .dll(因为我需要 SxS)。

我的问题是,当我使用ProcessBuilderRuntime.getRuntime().exec() 启动完全相同的.bat 文件(具有完全相同的参数和进程环境)时,它似乎没有考虑到我的SxS 配置,因此我需要的 .dll 根本没有加载,导致错误。

有没有人知道如何启动这个 .bat 文件,就像我双击它时 Windows 启动它一样? 此外,是否有人对 Java SxS 部署有任何经验?我真的不明白为什么 ProcessBuilder 会忽略我的 SxS 配置。

提前致谢。

【问题讨论】:

【参考方案1】:

您可以尝试启动一个 cmd 窗口,该窗口会加载您的应用程序 bat 文件:

Runtime.getRuntime().exec("cmd /c start cmd.exe /K \"C:\\path\\to\\the\\app.bat arg1 arg2\"");

【讨论】:

以上是关于Java中的Spawn过程,类似于双击的主要内容,如果未能解决你的问题,请参考以下文章

java:请给一个简单的能双击就能运行的jar文件打包过程.

在 node.js 中使用参数生成过程

生成过程中的静态变量未初始化

child_process spawn() 中的通配符?

开始过程中的Kauth事件。 - 预防能力

Java程序打成Jar包全过程