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


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

EDIT: а что если a.exe является ли служба Windows? Он не имеет приложения, так как это не приложение для Windows.

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

7 60

7 ответов:

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

System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location);
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

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

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

затем получить путь, где файл, из которого эта сборка a грузился с:

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

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

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

var thisType = typeof(MyCustomClass);

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

var codeLocationPath = Path.GetDirectoryName(codeLocation);

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

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

сборка.GetEntryAssembly.Расположение

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