Averiguar el path del ejecutable |
Publicado el 14/Jul/2002
Revisado 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 Compact Framework.
Si quieres ver la versión .NET Framework normal y corriente, sigue este link.
Este código es parte de una librería que estoy
haciendo con algunas utilidades de uso común, básicamente basadas en llamadas a
funciones del API. En esta ocasión, está incluido en un módulo llamado WinAPI.
El incluirlo en un módulo (Module) es para poder llamar a estas funciones
de forma directa, sin necesidad de tener que crear una instancia de la clase.
Si prefieres usar clases en lugar de módulos, puedes declararlo como Class,
pero añade a cada función (o método/propiedad), la palabra clave Shared
para que estén compartidas. En C# habría que declarar las funciones con
static (que es el equivalente de Shared).
Hay que tener en cuenta que estas funciones
están pensadas para que se ejecuten desde una librería, por tanto, si
quieres usar el código directamente en la aplicación, (no usándolo dentro
de una DLL), creo que tendrás que usar las funciones DLLPath y DLLName,
(en lugar de AppPath y AppExeName), ya que estas dos son las que
recuperan el nombre de la aplicación que está actualmente en ejecución.
Esto último no lo he probado, pero me imagino que debería ser así...
PUES NO...
Si este código se inserta directamente en un proyecto, (sin usar una librería),
tanto AppPath como DLLPath devuelven el mismo valor, lo mismo
ocurre con APPExeName y DLLName.
Realmente, el código mostrado no usa el API del Sistema Operativo, pero...
El código para Visual Basic.NET
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.GetName.CodeBase.ToString) ' 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.GetName.CodeBase.ToString 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.GetName.CodeBase.ToString) ' 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.GetName.CodeBase.ToString 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
Aún no lo tengo hecho en C#, pero básicamente es muy parecido a Visual Basic, salvo por la forma de usar las instrucciones.
Pulsa este link, si quieres ver la versión del .NET Framework normal.