Я могу придумать два варианта, в зависимости от того, что вы на самом деле хотите. Первый - получить путь к каталогу resident (где находятся исполняемые файлы), а второй - к каталогу current (каталог, указанный для работы исполняемого файла):
Резидентный каталог :
var path = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
Текущий каталог :
var path = System.Environment.CurrentDirectory;
Существует также другая опция, которая, согласно документации gets the path for the executable file that started the application, not including the executable name
:
var path = Application.StartupPath;
Что касается построения вашего пути, другие ответы действительно очень хорошо охватывают это.