Publicado el 17/Jul/2002
Actualizado el 16/Jul/2002
Funciones para averiguar el path y el nombre de la aplicación.
Nota:
El código que se muestra a continuación sólo es válido para .NET Framework normal, cómo comprobarás, es muy parecido al código usado para .NET Compact Framework, lo único que se diferencia es en el objeto que se utiliza para averiguar dicho path.Este código es parte de una librería que estoy haciendo con algunas utilidades de uso común, básicamente basadas en llamadas al API de Windows y otras cosillas similares. Por tanto, la forma de usar las dos funciones que nos indican el nombre del ejecutable actual (AppExeName) y el path del mismo (AppPath), sólo es válido si este código forma parte de una librería.
Si lo usas directamente en el mismo proyecto, tanto estas funciones como DLLPath y DLLName, devuelven el mismo valor.En el código de C#, debido a que este lenguaje no admite parámetros opcionales, hay que crear dos funciones, en la que una reciba el parámetro y la otra no. Esto mismo se puede hacer también con Visual Basic .NET.
Nota:
Si quieres averiguar el path del ejecutable y el nombre, sin usar API, sigue este link.
Imports System.Reflection.Assembly ' Al declararlo como Module no es necesario crear una clase. ' Si se convirtiera en clase, habría que declarar las funciones como Shared Public Module WinAPI ' #Region " Funciones para saber el path y nombre del ejecutable (y esta DLL) " ' '<summary> ' Devuelve el path de la aplicación. ' Al usarse desde una librería (DLL), hay que usar GetCallingAssembly ' para que devuelva el path del ejecutable (o librería) que llama a esta función. ' Si no se usa GetCallingAssembly, devolvería el path de la librería. '</summary> '<param name="backSlash">Opcional. True si debe devolver el path terminado en \</param> '<returns> ' El path de la aplicación con o sin backslash, según el valor del parámetro. '</returns> Public Function AppPath( _ Optional ByVal backSlash As Boolean = False _ ) As String Dim s As String = IO.Path.GetDirectoryName( _ GetExecutingAssembly.GetCallingAssembly.Location) ' si hay que añadirle el backslash If backSlash Then s &= "\" End If Return s End Function ' '<summary> ' Devuelve el nombre del ejecutable. ' Al usarse desde una librería (DLL), hay que usar GetCallingAssembly ' para que devuelva el nombre del ejecutable (o librería) que llama a esta función. ' Si no se usa GetCallingAssembly, devolvería el nombre de esta librería. '</summary> '<param name="fullPath">Opcional. True si debe devolver nombre completo.</param> '<returns>El nombre del ejecutable, con o sin el path completo, según el valor del parámetro. '</returns> Public Function AppExeName( _ Optional ByVal fullPath As Boolean = False _ ) As String Dim s As String = GetExecutingAssembly.GetCallingAssembly.Location Dim fi As New IO.FileInfo(s) If fullPath Then s = fi.FullName Else s = fi.Name End If ' Return s End Function ' '<summary> ' Devuelve el path de esta librería. '</summary> '<param name="backSlash">Opcional. True si debe devolver el path terminado en \ '</param> '<returns> ' El path de esta librería, con o sin backslash, según el valor del parámetro. '</returns> Public Function DLLPath( _ Optional ByVal backSlash As Boolean = False _ ) As String Dim s As String = IO.Path.GetDirectoryName(GetExecutingAssembly.Location) ' si hay que añadirle el backslash If backSlash Then s &= "\" End If Return s End Function ' '<summary> ' Devuelve el nombre de esta librería. '</summary> '<param name="fullPath">Opcional. True si debe devolver nombre completo.</param> '<returns>El nombre de esta librería, con o sin el path completo, según el valor del parámetro. '</returns> Public Function DLLName( _ Optional ByVal fullPath As Boolean = False _ ) As String Dim s As String = GetExecutingAssembly.Location Dim fi As New IO.FileInfo(s) If fullPath Then s = fi.FullName Else s = fi.Name End If ' Return s End Function ' #End Region ' End Module
Por ahora no hay código de prueba para C#
Debido a que C# no admite parámetros opcionales, hay que crear dos funciones, en la que una reciba el parámetro y la otra no. Esto mismo se puede hacer también con Visual Basic .NET.
using System.Reflection; using System.IO;#region Funciones para saber el path y nombre del ejecutable (y esta DLL) // public static String AppPath() { return Path.GetDirectoryName(Assembly.GetCallingAssembly().Location); } public static String AppPath( bool backSlash ) { String s = Path.GetDirectoryName(Assembly.GetCallingAssembly().Location); // si hay que añadirle el backslash if (backSlash) s += "\\"; return s; } // public static String AppExeName() { String s = Assembly.GetCallingAssembly().Location; FileInfo fi = new FileInfo(s); s = fi.Name; return s; } public static String AppExeName( bool fullPath ) { String s = Assembly.GetCallingAssembly().Location; FileInfo fi = new FileInfo(s); if (fullPath) s = fi.FullName; else s = fi.Name; return s; } // public static String DLLPath() { return Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); } public static String DLLPath( bool backSlash ) { String s = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); // si hay que añadirle el backslash if (backSlash) s += "\\"; return s; } // public static String DLLName() { String s = Assembly.GetExecutingAssembly().Location; FileInfo fi = new FileInfo(s); return fi.Name; } public static String DLLName( bool fullPath ) { String s = Assembly.GetExecutingAssembly().Location; FileInfo fi = new FileInfo(s); if (fullPath) s = fi.FullName; else s = fi.Name; return s; } #endregion