进程类不打印echo输出c#

时间:2016-11-29 15:06:21

标签: c# cmd command output

由于旧的question扩展了很多,没有工作答案(但很有用),我想重新设计它。事实是在cmd中一切都运行良好,但不是c#。如果共享资源存在,则c#中net use的输出是正确的:'command completed'(在我的例子中,用西班牙语)。 但是当共享资源不存在时,echo'false'在cmd中工作,但不在c#中,所以我无法区分发生的事情(用户权限或资源未找到)。在c#中我尝试过:

String cmd = "....else (echo "+false+")";
String cmd = "....else (echo false)";
String cmd = "....else (echo 'false')";

没有人工作。 方法(从旧问题修改):

void mapDrive(String driveChar, string server, string user, string password)
{

    try
    {

        String output;

        String cmd = "if exist " + server + " (net use " + driveChar + ": " + server + " /user:" + user + " " + password + " ) else (echo false)";
        ProcessStartInfo processStartInfo = new ProcessStartInfo("cmd", "/c" + cmd);
        processStartInfo.RedirectStandardOutput = true;
        processStartInfo.RedirectStandardError = true;
        processStartInfo.UseShellExecute = false;
        processStartInfo.CreateNoWindow = true;

        Process proc = new Process();
        proc.StartInfo = processStartInfo;
        proc.Start();
        proc.WaitForExit(2000);
        proc.Close();

        StreamReader streamReader = proc.StandardOutput;
        output = streamReader.ReadToEnd();
        Debug.WriteLine("CMD OUTPUT: " + output);

        if (output.Equals("false"))
        {
            MessageBox.Show("Error: couldn't found requested resource");
        }

    }
    catch (Exception e)
    {
        MessageBox.Show("Error: you have no privileges");
    }
}

1 个答案:

答案 0 :(得分:1)

您的代码中存在两个问题。首先,您在读取输出之前关闭了该过程,因此您应该将proc.Close()移动到方法的末尾。另一个问题是输出会包含换行符,因此请将if (output.Equals("false"))更改为if (output.Contains("false"))