none
关于获得命令行返回信息(About get CMD return information)? RRS feed

  • 问题

  • using (Process process = new System.Diagnostics.Process())
          {
            process.StartInfo.FileName = "java";
            process.StartInfo.Arguments = "";
            process.StartInfo.UseShellExecute = false;
            process.StartInfo.CreateNoWindow = true;
            process.StartInfo.RedirectStandardOutput = true;
            process.Start();
            string output = process.StandardOutput.ReadToEnd();
            if (String.IsNullOrEmpty(output) == false)
              MessageBox.Show(output);
            process.WaitForExit();
            process.Close();
          }
    

    用这个的方法可以弹出java的帮助,但是我改一下就是把java改成javac
    process.StartInfo.FileName = "javac";
    怎么也弹出不信息了,这是怎么回事,java的环境变量我设置好了,在cmd里面直接输javac可以出信息,但为什么在程序里不能获得javac的编绎信息呢,有什么办好获得/

    Using the above method I can get "java" help informaiton,but,I Replace the java javac
    process.StarInfo.FileName="javac";
    The can't MessageBox javac information,I already set the java environment variable, in cmd ,if input javac,they can show information,but why using the method can
    show java information,can't show javac information,can you help me;
    2011年2月19日 8:12

答案

  • 您好,while1989:

    欢迎来到MSDN论坛。 关于您的这个问题,我在process.WaitForExit();代码之后加入一行代码:int exitCode = process.ExitCode;当以javac运行到这行的时候,其返回值为2. 在MSDN资料库中,对于ExitCode的值有如此描述:
        开发人员通常使用为零的 ExitCode 值指示成功退出,并通过非零值指出错误,调用方法可使用非零值来标识进程不正常终止的原因。虽然不必遵从这些准则,但这些准则是约定。

    Process 在处理这个类的同时,认为该程序未能正常结束,也就无法获取该返回值了。建议您去Java支持论坛了解javac的工作原理。

    感谢您的参与。


    Neddy Ren [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    • 已建议为答案 mazhou 2011年2月22日 9:14
    • 已标记为答案 Neddy Ren 2011年2月28日 1:55
    2011年2月21日 7:05
  • 你好 版主

    不只是.net啊,在cmd里面输入java>log.txt可以把输出信息保存到记事本里面,但输入javac>log.txt,却无法把输出信息写到记事本里,这可能就是无法获得返回的原因吧


    您好,while1989:

    总结以上的情况,属于Java的实现机制与C#的实现机制问题,我们并不知晓Java的实现机制。但是,我可以提供一个用VC/C++编写的例子,是可以得到您需要的功能,您不妨试试看:

    Redirecting an arbitrary Console's Input/Output:
    http://www.codeproject.com/KB/threads/redir.aspx


    Neddy Ren [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    • 已标记为答案 Neddy Ren 2011年2月28日 1:55
    2011年2月25日 2:10

全部回复

  • 好像是要等到命令执行完成才会返回结果

    你可以使用异步读取的方式来实时打印输出结果(BeginOutputReadLine方法)

     


    family as water
    2011年2月20日 14:30
  • 您好,while1989:

    欢迎来到MSDN论坛。 关于您的这个问题,我在process.WaitForExit();代码之后加入一行代码:int exitCode = process.ExitCode;当以javac运行到这行的时候,其返回值为2. 在MSDN资料库中,对于ExitCode的值有如此描述:
        开发人员通常使用为零的 ExitCode 值指示成功退出,并通过非零值指出错误,调用方法可使用非零值来标识进程不正常终止的原因。虽然不必遵从这些准则,但这些准则是约定。

    Process 在处理这个类的同时,认为该程序未能正常结束,也就无法获取该返回值了。建议您去Java支持论坛了解javac的工作原理。

    感谢您的参与。


    Neddy Ren [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    • 已建议为答案 mazhou 2011年2月22日 9:14
    • 已标记为答案 Neddy Ren 2011年2月28日 1:55
    2011年2月21日 7:05
  • 异步方法我早试过了一样没法解决,
    2011年2月21日 14:23
  • 您好 while1989:

    因为ExitCode返回的不是.Net约定的0,而是2,因此我们在用Process的时候,.Net认为javac.exe没有正常终止,也没有任何返回值。当然不论用同步还是异步,都是一样的效果。


    Neddy Ren [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2011年2月22日 9:53
  • 你好 版主

    不只是.net啊,在cmd里面输入java>log.txt可以把输出信息保存到记事本里面,但输入javac>log.txt,却无法把输出信息写到记事本里,这可能就是无法获得返回的原因吧

    2011年2月24日 15:27
  • 你好 版主

    不只是.net啊,在cmd里面输入java>log.txt可以把输出信息保存到记事本里面,但输入javac>log.txt,却无法把输出信息写到记事本里,这可能就是无法获得返回的原因吧


    您好,while1989:

    总结以上的情况,属于Java的实现机制与C#的实现机制问题,我们并不知晓Java的实现机制。但是,我可以提供一个用VC/C++编写的例子,是可以得到您需要的功能,您不妨试试看:

    Redirecting an arbitrary Console's Input/Output:
    http://www.codeproject.com/KB/threads/redir.aspx


    Neddy Ren [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    • 已标记为答案 Neddy Ren 2011年2月28日 1:55
    2011年2月25日 2:10