【发布时间】:2023-03-17 06:04:02
【问题描述】:
有什么方法可以制作一个 Java 程序(在 Windows 中),它只是作为 PE 的包装器 (.exe),将所有标准输入输入传递给程序,并将 PE 写入的所有内容写入标准输出。
我需要这个,因为程序的接口只允许 Java 类,但我希望它运行一些我用 C++ 组合在一起的代码。
提前致谢。
编辑:可移植性是 0% 重要。这只需要在 Windows 中工作,永远不需要在其他任何地方工作。
【问题讨论】:
有什么方法可以制作一个 Java 程序(在 Windows 中),它只是作为 PE 的包装器 (.exe),将所有标准输入输入传递给程序,并将 PE 写入的所有内容写入标准输出。
我需要这个,因为程序的接口只允许 Java 类,但我希望它运行一些我用 C++ 组合在一起的代码。
提前致谢。
编辑:可移植性是 0% 重要。这只需要在 Windows 中工作,永远不需要在其他任何地方工作。
【问题讨论】:
ProcessBuilder pb = new ProcessBuilder("myCommand", "myArg1", "myArg2");
Map<String, String> env = pb.environment();
env.put("VAR1", "myValue");
env.remove("OTHERVAR");
env.put("VAR2", env.get("VAR1") + "suffix");
pb.directory("myDir");
Process p = pb.start();
【讨论】:
是的,这可以通过 java.lang.Runtime.ecec() 和 java.lang.Process 实现,您可以使用它们将所有 3 个流(输入/输出/错误)访问到您正在执行的 *.exe。
【讨论】:
其他人提到了标准的 Java 机制(ProcessBuilder 及其ilk)。但是,可靠地重新路由 stdout/stdin/errout 需要 care (additional)。如果您不需要在 Java 应用程序中处理此 I/O,请考虑通过 JNI 或 JNA (demo here) 使用本机调用(例如 C 的 system 函数)。
【讨论】: