Каков наилучший способ получить путь к исполняемому exe in.NET?
из программы a.exe расположенный в c:/dir мне нужно открыть текстовый файл c:/dir/text.формат txt. Я не знаю, где a.exe может быть, но текст.txt всегда будет идти по одному и тому же пути. Как получить имя текущей исполняемой сборки изнутри для самой программы, чтобы я мог получить доступ к текстовому файлу?
EDIT: а что если a.exe является ли служба Windows? Он не имеет приложения, так как это не приложение для Windows.
спасибо заранее.
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 );
см. здесь для получения дополнительной информации:
сделать сборку вы заинтересованы в (например. назначить
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");