2012-12-27 37 views
1

我遇到了一個奇怪的問題。我在Windows 7 SP1 64位下安裝了Java JRE 7 64位。我還安裝了帶有C/C++編譯器的Visual Studio 2010 IDE。我試圖通過Java Runtime Exec執行cl.exe命令來獲得編譯器生成版本。運行Java運行時運行時在Microsoft C++中缺少啓動橫幅

當我打開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 [選項...] ...文件名[/鏈接linkoption ...]

但是,當我在Java運行時內執行相同的命令,我得到這樣的輸出:

使用:cl [option ...] filename ... [/ link linkoption ...]

輸出不包含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過程是能夠理解到其啓動的背景和禁用啓動旗幟。任何想法如何獲得啓動橫幅?

+0

(忘了打回來。)有多個地方寫輸出。 –

回答

2

這是因爲cl.exe正在發送橫幅到錯誤流。閱讀p.GetErrorStream()查找橫幅。您可以驗證這是通過執行CL這樣的命令提示符下的情況:

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

注意的旗幟沒有出現,而是被路由到您的桌面\ error.txt。

+1

確實!你是對的。使用重定向運算符,我可以得到stderr標準輸出。我使用了這個命令:cmd/d/c chdir/d C:\\ Program Files(x86)\\ Microsoft Visual Studio 10.0 \\ Common7 \\ IDE && .. \\ .. \\ VC \\ bin \\ cl 2>&1 –

+0

Aha,將標準錯誤重定向到標準輸出做得非常好 - 非常好。 –