如何检查驱动器是否已成功映射到C#中的网络使用?

如何检查驱动器是否已成功映射到C#中的网络使用?,c#,drive,net-use,C#,Drive,Net Use,我尝试在执行netuse命令后测试目录是否存在,但是在mapDrive()完成映射驱动器之前,checkMappedDrive()正在执行 public void mapDrive(String driveChar, String server, String user, String password){ String path = "use "+driveChar+": "+server +" /user:"+user+ " "+password; proc.StartInf

我尝试在执行netuse命令后测试目录是否存在,但是在mapDrive()完成映射驱动器之前,checkMappedDrive()正在执行

public void mapDrive(String driveChar, String server, String user, String password){
    String path = "use "+driveChar+": "+server +" /user:"+user+ " "+password;
    proc.StartInfo.FileName = "net";
    proc.StartInfo.Arguments = path;
    proc.StartInfo.UseShellExecute = false;
    proc.Start();

   if(checkMappedDrive(driveChar)){
      //nice
   }else{
      //error
   }

}

public bool checkMappedDrive(String driveChar){

   String drive = Path.GetPathRoot(driveChar.ToUpper()+":\\"); 
   Debug.WriteLine("Checking: " + drive);
    if (!Directory.Exists(drive)){
            proc.Kill();
            //bad
    return false;
    }
      //nice
    return true;
}
您可以使用:

您可以使用:

使用
proc.WaitForExit()以等待流程完成

使用
proc.WaitForExit()以等待流程完成


别忘了使用带有超时的参数:因此,唯一的方法是等待几秒钟,对吗?当我输入一个无效用户时,需要20秒:/@tomyforever:该方法不会等待x秒,它会等到进程存在,但如果等待时间超过x毫秒(10秒以上),它将继续。因此,
Process.WaitForExit
的参数应该是映射驱动器通常需要的两倍。@TimSchmelter感谢澄清。别忘了使用带有超时的参数:所以,唯一的方法是等待几秒钟,对吗?当我放置一个无效用户时,需要20秒:/@tomyforever:该方法不会等待x秒,它将等待进程存在,但如果等待时间超过x毫秒(10秒以上),它将继续。因此,
Process.WaitForExit
的参数应该是映射驱动器通常需要的两倍。@TimSchmelter感谢澄清。使用Process.WaitForExit()确保shell操作完成。然后检查流程的ExitCode是否有任何错误。在此之后,您可能仍需要检查文件夹是否已成功映射。我希望完成此过程,因为当用户无效时,完成此过程大约需要10-15秒,可能是服务器过载或其他原因。请使用process.WaitForExit()确保shell操作完成。然后检查流程的ExitCode是否有任何错误。在此之后,您可能仍需要检查文件夹是否已成功映射。我希望完成此过程,因为当用户无效时,完成此过程大约需要10-15秒,可能是服务器过载或其他原因。
public void mapDrive(String driveChar, String server, String user, String password){
    String path = "use "+driveChar+": "+server +" /user:"+user+ " "+password;
    proc.StartInfo.FileName = "net";
    proc.StartInfo.Arguments = path;
    proc.StartInfo.UseShellExecute = false;
    proc.Start(); 
    proc.WaitForExit(10000); // wait 10 seconds at a maximum

   if(checkMappedDrive(driveChar)){
      //nice
   }else{
      //error
   }

}