1

私は奇妙な問題に遭遇しました。Windows 7SP164ビットの下にJavaJRE764ビットをインストールしています。また、C /C++コンパイラがインストールされたVisualStudio2010IDEもあります。Java Runtime Execを介してcl.exeコマンドを実行して、コンパイラビルドバージョンを取得しようとしています。

cmd.exeシェルを開き、ディレクトリ "C:\ Program Files(x86)\ Microsoft Visual Studio 10.0 \ Common7\IDE"で..\.. \ VC \ bin \ cl.exeを実行すると、次の出力が表示されます。

Microsoft(R)32ビットC / C++最適化コンパイラバージョン16.00.40219.01for 80x86 Copyright(C)MicrosoftCorporation。全著作権所有。

使用法:cl[オプション...]ファイル名...[/ link linkoption ...]

しかし、Javaランタイム内で同じコマンドを実行すると、次の出力が得られます。

使用法:cl[オプション...]ファイル名...[/ 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プロセスは、起動されたコンテキストを理解し、起動バナーを無効にできると思います。スタートアップバナーを取得する方法はありますか?

4

1 に答える 1

2

これはcl.exe、バナーをエラーストリームに送信しているためです。p.GetErrorStream()バナーを見つけるために読んでください。次のようにclを実行することにより、コマンドプロンプトでこれが当てはまることを確認できます。

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

バナーは表示されませんが、desktop\error.txtにルーティングされることに注意してください。

于 2012-12-27T02:27:17.127 に答える