Deseo averiguar programáticamente si mi aplicación se está ejecutando desde una unidad de red. ¿Cuál es la forma más simple de hacer eso? Debe admitir las rutas UNC (\\127.0.0.1\d$
) y las unidades de red mapeadas (Z :).¿La manera más fácil en C# para averiguar si una aplicación se está ejecutando desde una unidad de red?
Respuesta
Este es mi método actual de hacer esto, pero se siente como debería haber una mejor manera.
private bool IsRunningFromNetworkDrive()
{
var dir = AppDomain.CurrentDomain.BaseDirectory;
var driveLetter = dir.First();
if (!Char.IsLetter(driveLetter))
return true;
if (new DriveInfo(driveLetter.ToString()).DriveType == DriveType.Network)
return true;
return false;
}
Esto es para la unidad de unidad mapeada. Puede usar la clase DriveInfo
para averiguar si la unidad a es una unidad de red o no.
DriveInfo info = new DriveInfo("Z");
if (info.DriveType == DriveType.Network)
{
// Running from network
}
Método completo y código de muestra.
public static bool IsRunningFromNetwork(string rootPath)
{
try
{
System.IO.DriveInfo info = new DriveInfo(rootPath);
if (info.DriveType == DriveType.Network)
{
return true;
}
return false;
}
catch
{
try
{
Uri uri = new Uri(rootPath);
return uri.IsUnc;
}
catch
{
return false;
}
}
}
static void Main(string[] args)
{
Console.WriteLine(IsRunningFromNetwork(System.IO.Path.GetPathRoot(AppDomain.CurrentDomain.BaseDirectory))); }
En caso utilizando ruta UNC es Quitely sencilla - examinar nombre de host en la UNC y la prueba de que es localhost (127.0.0.1, :: 1, nombre de host, hostname.domain.local, direcciones IP de estación de trabajo) o no.
Si la ruta no es UNC - extraer la letra de unidad de la trayectoria y probar la clase DriveInfo para su tipo
if (new DriveInfo(Application.StartupPath).DriveType == DriveType.Network)
{
// here
}
DriveInfo m = DriveInfo.GetDrives().Where(p => p.DriveType == DriveType.Network).FirstOrDefault();
if (m != null)
{
//do stuff
}
else
{
//do stuff
}
reacomodé la solución de dotnetstep, que es en mi opinión es mejor porque evita excepciones cuando se pasa una ruta válida, y se produce una excepción si hay un camino equivocado pasado, que no permite hacer una suposición de verdadero o falso.
//----------------------------------------------------------------------------------------------------
/// <summary>Gets a boolean indicating whether the specified path is a local path or a network path.</summary>
/// <param name="path">Path to check</param>
/// <returns>Returns a boolean indicating whether the specified path is a local path or a network path.</returns>
public static Boolean IsNetworkPath(String path) {
Uri uri = new Uri(path);
if (uri.IsUnc) {
return true;
}
DriveInfo info = new DriveInfo(path);
if (info.DriveType == DriveType.Network) {
return true;
}
return false;
}
prueba:
//----------------------------------------------------------------------------------------------------
/// <summary>A test for IsNetworkPath</summary>
[TestMethod()]
public void IsNetworkPathTest() {
String s1 = @"\\Test"; // unc
String s2 = @"C:\Program Files"; // local
String s3 = @"S:\"; // mapped
String s4 = "ljöasdf"; // invalid
Assert.IsTrue(RPath.IsNetworkPath(s1));
Assert.IsFalse(RPath.IsNetworkPath(s2));
Assert.IsTrue(RPath.IsNetworkPath(s3));
try {
RPath.IsNetworkPath(s4);
Assert.Fail();
}
catch {}
}
- 1. La mejor manera de verificar si una aplicación de iPhone se está ejecutando por primera vez
- 2. Cómo determinar si una aplicación web se está ejecutando actualmente
- 3. ¿Cómo comprobar si una aplicación WPF ya se está ejecutando?
- 4. ¿Cuál es la manera más fácil en C# para recortar una nueva línea de una cuerda?
- 5. ¿Cuál es una manera fácil de probar si algún proceso de un ID dado se está ejecutando actualmente en Linux?
- 6. ¿Manera más fácil de ejecutar una aplicación Java de Maven?
- 7. ¿La manera más fácil de determinar si la conexión a internet del iPhone está disponible?
- 8. Detectar si la aplicación se está ejecutando en la computadora portátil
- 9. ¿Cuál es la forma más fácil/rápida de averiguar cuándo se creó una rama git?
- 10. C++ averiguar si el depurador está conectado
- 11. ¿La manera más fácil de ejecutar una aplicación simple GLES/EGL/OpenVG en una PC?
- 12. ¿Por qué mi aplicación .NET falla cuando se ejecuta desde una unidad de red?
- 13. manera más fácil de leer desde una URL en una cadena en .NET
- 14. En PowerShell, ¿cómo puedo determinar si la unidad actual es una unidad en red o no?
- 15. Comprobando si mi aplicación de Windows se está ejecutando
- 16. ¿Está usando GetProcessesByName la mejor manera de verificar si un proceso se está ejecutando?
- 17. La manera más fácil de dibujar una secuencia de puntos en WPF desde el código
- 18. ¿Cuál es la forma más fácil en C# para validar si una expresión regular está bien formada?
- 19. Python: Cómo prohibir la apertura de una aplicación si ya se está ejecutando
- 20. ¿Cómo saber si se está ejecutando una aplicación de pantalla completa?
- 21. Cómo rastrear si se está ejecutando una tarea async/awaitable
- 22. evitar que una aplicación C# ejecute más de una instancia
- 23. ¿Cuál es la mejor manera para que una aplicación WinForms determine exactamente en qué sistema operativo Windows se está ejecutando?
- 24. Comprueba de forma programática si una letra de unidad es una unidad compartida/de red
- 25. ¿Cómo puedo saber si mi aplicación para iPhone se está ejecutando cuando se recibe una notificación push?
- 26. ¿Está ejecutando una aplicación GWT (incluidos Applets) dentro de un IFRAME desde una aplicación ASP.NET 3.5?
- 27. Reconexión de una unidad de red desconectada
- 28. ¿Puedes averiguar si una instancia de Django Model está "sucia"?
- 29. ¿Hay una manera más fácil de ejecutar una aplicación de Android usando el emulador de eclipse?
- 30. ¿Cómo determinar si se está ejecutando una instancia previa de mi aplicación?