Каков наилучший способ получить путь исполняемого exe-файла в .NET? - PullRequest
64 голосов
/ 03 августа 2009

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

EDIT : Что делать, если a.exe является службой Windows? У него нет приложения, так как оно не является приложением Windows.

Заранее спасибо.

Ответы [ 7 ]

128 голосов
/ 03 августа 2009

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

System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location);
12 голосов
/ 03 августа 2009
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 голосов
/ 03 августа 2009

Получите интересующую вас сборку (например, назначенную переменной 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 также возможен, как объяснено в других ответах.

4 голосов
/ 03 августа 2009
1 голос
/ 07 мая 2018

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

Assembly.GetEntryAssembly.Location

В C #:

Assembly.GetEntryAssembly().Location
0 голосов
/ 16 марта 2017

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

var thisType = typeof(MyCustomClass);

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

var codeLocationPath = Path.GetDirectoryName(codeLocation);

var appConfigPath = Path.Combine(codeLocationPath, "AppConfig");
0 голосов
/ 07 августа 2009
MessageBox.Show("This program is located in: " + Environment.CurrentDirectory);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...