由于旧的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");
}
}
答案 0 :(得分:1)
您的代码中存在两个问题。首先,您在读取输出之前关闭了该过程,因此您应该将proc.Close()
移动到方法的末尾。另一个问题是输出会包含换行符,因此请将if (output.Equals("false"))
更改为if (output.Contains("false"))