1

我遇到了一个奇怪的问题。我在 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 时,我得到以下输出:

Microsoft (R) 32 位 C/C++ 优化编译器版本 16.00.40219.01,适用于 80x86 版权所有 (C) Microsoft Corporation。版权所有。

用法: 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 进程能够理解启动它的上下文并禁用启动横幅。知道如何获得启动横幅吗?

4

1 回答 1

2

这是因为cl.exe将横幅发送到错误流。阅读p.GetErrorStream()以找到横幅。您可以通过像这样执行 cl 在命令提示符下验证是否是这种情况:

cl 2>%userprofile%\Desktop\error.txt

请注意,横幅不会出现,而是路由到您的桌面\error.txt。

于 2012-12-27T02:27:17.127 回答