2014-10-01 93 views
4

此代码的工作我的测试系统(原Windows的服务器的复制2008 R2)过程WaitForExit()永远不会结束(CMD openFiles散)

private string _getNetFiles() 
{ 
    // prepare execution process 
    ProcessStartInfo processStartInfo = new ProcessStartInfo("cmd.exe", "/c openfiles /query /Fo list"); 
    processStartInfo.CreateNoWindow = true; 
    processStartInfo.UseShellExecute = false; 
    processStartInfo.RedirectStandardError = true; 
    processStartInfo.StandardOutputEncoding = System.Text.Encoding.GetEncoding(437); 
    processStartInfo.RedirectStandardOutput = true; 

    // execute 
    Process process = Process.Start(processStartInfo); 
    process.WaitForExit(); 


    // read outputs 
    string stdOutput = process.StandardOutput.ReadToEnd(); 
    string stdError = process.StandardError.ReadToEnd(); 

    return stdOutput; 
} 

在原有系统上的罚款: 我看到“ cmd.exe/c openfiles/query/Fo list“Task-Manger中的任务,但这个任务永远不会结束(process.WaitForExit()进程永远不会结束)。 Cmd原系统:openfiles/query/fo列表作品还行!

问题在哪里?

问候raiserle

编辑: 我可以停止使用任务管理器的进程。 stdOutput是正确的。为什么不结束cmd-taks。

回答

4

子进程正在等待输入或读取其输出。管道缓冲区不是无限大。您需要不断排出标准输出以及标准错误。

Get Values from Process StandardOutput看起来很合理。 https://stackoverflow.com/a/24084220/122718文件如何安全读取两个流。

另请注意Visual Basic Capture output of cmd以及everything that Hans Passant says on this topic

在没有输出重定向的情况下使用Process类相当棘手,记录不当。

+0

任何建议,为什么在测试系统上工作?错误(读取stderr结束)不在测试系统上。任务没有阻塞。 – raiserle 2014-10-01 17:57:27

+0

我对这个命令的作用以及在什么情况下可能与输入有关没有具体的了解。 – usr 2014-10-02 10:15:22

相关问题