我遇到了一个奇怪的问题。我在 Windows 7 SP1 64 位下安装了 Java JRE 7 64 位。我还安装了带有 C/C++ 编译器的 Visual Studio 2010 IDE。我试图通过 Java Runtime Exec 执行 cl.exe 命令来获取编译器构建版本。
当我打开 cmd.exe shell 并在目录“C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE”中执行 ..\..\VC\bin\cl.exe 时,我得到这个输出:
适用于 80x86 的 Microsoft (R) 32 位 C/C++ 优化编译器版本 16.00.40219.01 版权所有 (C) 微软公司。保留所有权利。
用法:cl [ 选项... ] 文件名... [/link 链接选项... ]
但是当我在 Java 运行时中执行相同的命令时,我得到以下输出:
用法:cl [ 选项... ] 文件名... [/link 链接选项... ]
输出不包含 2 行启动横幅。我需要启动横幅来显示编译器版本以及内部版本号。
我用来执行命令的 Java 模板是:
public static void main(String[] args) {
try {
Process p = Runtime.getRuntime().exec("cmd /d /c chdir /d C:\\Program Files (x86)\\Microsoft Visual Studio 10.0\\Common7\\IDE && ..\\..\\VC\\bin\\cl");
BufferedReader in = new BufferedReader( new InputStreamReader(p.getInputStream()));
String line = null;
while ((line = in.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
我怀疑 cl.exe 进程能够理解它启动的上下文并禁用启动横幅。知道如何获得启动横幅吗?
最佳答案
这是因为 cl.exe
正在将横幅发送到错误流。阅读 p.GetErrorStream()
以查找横幅。您可以通过执行 cl 来验证命令提示符上的情况是否如此:
cl 2>%userprofile%\Desktop\error.txt
请注意,横幅不会出现,但会路由到您的桌面\error.txt。
关于java - 通过 Java 运行时运行时,Microsoft C++ 中缺少启动横幅,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14048631/