Índice de la sección dedicada a .NET (en el Guille)   .NET Compact Framework

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

 

El código para C#

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.


la Luna del Guille o... el Guille que está en la Luna... tanto monta...