2009-11-27 24 views
5

Si intento escribir un archivo en una unidad de red, que está desconectado, aparece un error.Reconexión de una unidad de red desconectada

Si hago doble clic en la unidad en el explorador, la unidad de red se vuelve a conectar.

Usando System.Io.Driveinfo.IsReady Puedo verificar si una unidad está lista, pero ¿cómo puedo volver a conectarla en el código?

Respuesta

5

¿Esto code muestra cómo mapear la unidad y desasignarla dinámicamente en tiempo de ejecución? Esto está en CodeGuru.

+1

Tenga en cuenta que este código ya no funciona desde Windows Vista. – AndresRohrAtlasInformatik

0

Como señaló @AndresRohrAtlasInformatik, la solución aceptada no funciona con Windows Vista y posterior.

Así que mi solución es 'simplemente' iniciar el explorador como ventana oculta, ir a la unidad de red y cerrar el explorador. Esto último es un poco más difícil (ver here) porque el explorador tiene un comportamiento muy especial para múltiples ventanas.

ProcessStartInfo info = new ProcessStartInfo("explorer.exe", myDriveLetter); 
info.WindowStyle = ProcessWindowStyle.Hidden; 
Process process = new Process(); 
process.StartInfo = info; 
process.Start(); 
Thread.Sleep(1000); 
//bool res = process.CloseMainWindow(); // doesn't work for explorer !! 
//process.Close(); 
//process.WaitForExit(5000); 

// https://stackoverflow.com/a/47574704/2925238 
ShellWindows _shellWindows = new SHDocVw.ShellWindows(); 
string processType; 

foreach (InternetExplorer ie in _shellWindows) 
{ 
    //this parses the name of the process 
    processType = System.IO.Path.GetFileNameWithoutExtension(ie.FullName).ToLower(); 

    //this could also be used for IE windows with processType of "iexplore" 
    if (processType.Equals("explorer") && ie.LocationURL.Contains(myDriveLetter)) 
    { 
     ie.Quit(); 
    } 
} 
Cuestiones relacionadas