getmodulefilename (kernel32)
Last changed: -73.246.221.57

.
Summary

C# Signature:

[DllImport("kernel32.dll", SetLastError=true)]
[PreserveSig]
public static extern uint GetModuleFileName
(
    [In]
    IntPtr hModule,

    [Out]
    StringBuilder lpFilename,

    [In]
    [MarshalAs(UnmanagedType.U4)]
    int nSize
);

VB.Net Signature:

<DllImport("kernel32.dll", SetLastError:=True), PreserveSig>
Public Shared Function GetModuleFileName(<[In]> ByVal hModule As IntPtr, <Out()> ByVal lpFilename As StringBuilder, <[In], MarshalAs(UnmanagedType.U4)> ByVal nSize As Integer) As UInteger
End Function

User-Defined Types:

None.

Notes:

None.

Tips & Tricks:

If you want to use GetModuleFilename to retrieve the path the current executable was started from, you should instead consider using System.Windows.Forms.Application.StartupPath. This is a wrapper around GetModuleFilename, so it probably does exactly what you want.

Another way: Process.GetCurrentProcess().MainModule.FileName

Sample Code:

C#

using System;
using System.Text;
using System.Runtime.InteropServices;
using Library.Win32.Process;

namespace Test
{
    class Class1
    {
    [STAThread]
    static void Main(string[] args)
    {
        StringBuilder fileName = new StringBuilder(255);
        DllFuntions.GetModuleFileName(IntPtr.Zero, fileName, fileName.Capacity);
        Console.WriteLine(fileName);
     }
     }
}

VB.NET

Dim sbPath As New StringBuilder(255)
GetModuleFileName(IntPtr.Zero, sbPath, sbPath.Capacity)
Debug.Print(sbPath.ToString)

Alternative Managed API:

System.Diagnostics.ProcessModule.FileName or System.Reflection.Module.FullyQualifiedName.

Documentation