¿Cómo averiguamos la ruta en la que está un ejecutable?

Hay varias formas para todos los gustos: desde los que van a lo práctico a los que les "mola" complicarse la vida. Veámoslas todas ;-)

- Solución 1 (fácil):

private static string RutaActual()
{
     return Environment.CurrentDirectory;
}

- Solución 2 (fácil):

using System.IO;

private static string RutaActual()
{
     return Directory.CurrentDirectory;
}

- Solución 3 (media):

using System.Diagnostics;

private static string RutaActual()
{
     string arch = Process.GetCurrentProcess().MainModule.FileName;
     return arch.Substring(0, arch.LastIndexOf("\\"));
}

- Solución 4 (super-rebuscada: como la hace la plataforma .NET y usando la API):

private static string RutaActual()
{
      string text2;
      StringBuilder builder1 = new StringBuilder(0x105);
      if (Win32Native.GetCurrentDirectory(builder1.Capacity, builder1) == 0)
      {
            __Error.WinIOError();
      }
      string text1 = builder1.ToString();
      if (text1.EndsWith(@"\"))
      {
            text2 = text1 + ".";
      }
      else
      {
            text2 = text1 + @"\.";
      }
      string[] textArray1 = new string[] { text2 } ;
      new FileIOPermission(FileIOPermissionAccess.PathDiscovery, textArray1, false, false).Demand();
      return text1;
}

En esta última me niego a poner todas las definiciones (copiado y pegado de .NET Reflector) :-(

Escoja la que más le guste, pero lo cierto es que usar la 1, la 2 o 3 es exactamente lo mismo porque las dos primeras llaman a esta última. Así que en el fondo la más rápida puede que sea la tercera que usa una manera completamente distinta de hacerlo ¿o no? Quien sabe... ;-)

¿Este post te ha ayudado?, ¿has aprendido algo nuevo?
Pues NO te pido que me invites a un café... Te pido algo más fácil y que te hará sentir mejor