Подтвердить что ты не робот

Каков наилучший способ получить исполняемый exe-путь в .NET?

Из программы a.exe, расположенной в c:/dir, мне нужно открыть текстовый файл c:/dir/text.txt. Я не знаю, где может находиться файл a.exe, но text.txt всегда будет одним и тем же путем. Как получить имя текущей исполняемой сборки изнутри для самой программы, чтобы я мог получить доступ к текстовому файлу?

ИЗМЕНИТЬ: что если a.exe является сервисом Windows? У него нет приложения, поскольку оно не является прикладной программой Windows.

Спасибо заранее.

4b9b3361

Ответ 1

Я обычно обращаюсь к каталогу, в котором содержится мое приложение .exe с:

System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location);

Ответ 2

string exePath = Application.ExecutablePath;
string startupPath = Application.StartupPath;

РЕДАКТИРОВАТЬ - Без использования объекта приложения:

string path = System.IO.Path.GetDirectoryName( 
      System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase );

Подробнее см. здесь:

http://msdn.microsoft.com/en-us/library/aa457089.aspx

Ответ 4

Получить интересующую вас сборку (например, назначен переменной System.Reflection.Assembly a):

  • System.Reflection.Assembly.GetEntryAssembly(), или
  • typeof(X).Assembly для класса X, который в интересующей вас сборке (для Windows Forms вы можете использовать typeof(Program))

Затем введите путь, из которого был загружен файл, из которого была загружена эта сборка a:

  • System.IO.Path.GetDirectoryName(a.Location)

Объект Application из приложения Windows Forms также является возможностью, как объясняется в других ответах.

Ответ 5

В VB.NET мы можем получить это следующим образом:

Assembly.GetEntryAssembly.Location

В С#:

Assembly.GetEntryAssembly().Location

Ответ 6

используя ответ peSHlr, хорошо работал при тестировании в NUnit.

var thisType = typeof(MyCustomClass);

var codeLocation = Path.GetDirectoryName(thisType.Assembly.Location);

var codeLocationPath = Path.GetDirectoryName(codeLocation);

var appConfigPath = Path.Combine(codeLocationPath, "AppConfig");

Ответ 7

MessageBox.Show("This program is located in: " + Environment.CurrentDirectory);