java - 通过 Java 运行时运行时,Microsoft C++ 中缺少启动横幅

标签 java visual-c++

我遇到了一个奇怪的问题。我在 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/

相关文章:

c++ - 如何在 Visual C++ 中对 x64 项目运行代码分析?

c++ - wxWidgets - 通过 DLL 添加项目到 sizer

c++ - 读取 cmd 生成的文件,结果出现 3 个奇怪的符号

c - 正在链接...链接: fatal error LNK1181: cannot open input file 'libgsl.a'

java - 文件输入流创建

Java:监听远程 Linux 服务器上的目录更改

Java:计算质数

visual-c++ - Visual Studio VC2013 在没有 AVX 的情况下启用 SSE4.1

java - 有没有更好的方法在 Matcher 中使用 group() 提取名称-值?

java - 将数据从 AWS Lambda 发送到 SQS 队列时连接重置