MSDN has an article that says to use System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase
; if you need the directory, use System.IO.Path.GetDirectoryName
on that result.
Or, there’s the shorter Application.ExecutablePath
which “Gets the path for the executable file that started the application, including the executable name” so that might mean it’s slightly less reliable depending on how the application was launched.