【问题标题】:Running cygwin compiled program from Java从 Java 运行 cygwin 编译的程序
【发布时间】:2013-03-25 17:10:08
【问题描述】:

我已经使用 cygwin 构建了一个 .exe。它被称为 ms.exe。我正在尝试使用 ProcessBuilder 从 java 运行它。我之前使用过 ProcessBuilder 来捕获它的输出。

在命令窗口 (cmd.exe) 上,如果我运行 ms.exe [ms-params] > output.txt。然后输出包含

/cygdrive/c/my-path-to-ms.exe [msparams]

[程序输出]

在命令窗口中,如果我没有传递任何重定向,即 > output.txt,则输出仅包含 [程序输出]。

请注意,我的 PATH 环境变量下有 %CYGWIN_HOME%/bin。

使用 ms.exe 调用 ProcessBuilder 结束(没有任何异常)但作为输出我只得到

/cygdrive/c/my-path-to-ms.exe [msparams]

【问题讨论】:

  • 您是如何阅读Stream 的?你检查过错误流和标准输出流吗?
  • 我可以从 process.getInputStream 中读取,但结果与我得到的结果相同。我已将代码简化为仅使用 processBuilder.redierctOutput 写入文件。该文件以相同的一行结束。我正在捕捉强制性的 IoException 和 InterruptedException,但那里什么也没有。我的猜测是,当我从命令行运行时,会涉及到 bash。

标签: java cygwin


【解决方案1】:

使用ProcessBuilder("cmd.exe","/C","entire-exe-path-with-arguments") 运行可执行文件。

我还有另一个可执行文件,当用作ProcessBuilder("exe-path","arg1","arg2"..) 时可以工作。

我不确定为什么以前的可执行文件只能在 cmd 下运行。

两者都是使用 cygwin 构建的。我尝试将 cygwin1.dll 放在工作目录中,但没有任何效果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多