Должен ли я использовать AppDomain.CurrentDomain.BaseDirectory или System.Environment.CurrentDirectory?

У меня есть два файла exe в одной папке, я могу запустить exe2 с помощью кнопки в exe1. Сегодня я наблюдал за клиентом по сеансу удаленных (терминальных служб), и exe2 не смог запустить ошибку "Файл не найден", но exe1 находился в том же каталоге, когда мы проверили. Поэтому я должен использовать AppDomain.CurrentDomain.BaseDirectory или System.Environment.CurrentDirectory?

Спасибо

Ответ 1

Если вы хотите найти файлы в том же каталоге, что и ваше приложение, AppDomain.CurrentDomain.BaseDirectory - правильный выбор.

Environment.CurrentDirectory - это значение, которое может и будет изменяться в ходе выполнения вашего приложения. Например, используя параметры по умолчанию, OpenFileDialog в WinForms изменит это значение на каталог, в котором был выбран файл.

Ответ 2

AppDomain.CurrentDomain.BaseDirectory возвращает каталог, из которого был загружен текущий домен приложения.
System.Environment.CurrentDirectory возвращает текущий системный каталог.
В вашем случае AppDomain.CurrentDomain.BaseDirectory является лучшим решением.

Ответ 3

Вы должны использовать AppDomain.CurrentDomain.BaseDirectory.

Например, в приложении служб Windows:

System.Environment.CurrentDirectory вернет C:\Windows\system32

Пока

AppDomain.CurrentDomain.BaseDirectory вернет [Application.exe location]

Еще один важный фактор, который следует учитывать, заключается в том, что AppDomain.CurrentDomain.BaseDirectory является свойством readonly, а Environment.CurrentDirectory может быть чем-то еще при необходимости:

// Change the directory to AppDomain.CurrentDomain.BaseDirectory
Environment.CurrentDirectory = AppDomain.CurrentDomain.BaseDirectory;   

Ответ 4

Как я понимаю, вы должны использовать BaseDirectory. CurrentDirectory может меняться в ходе выполнения программы.

Ответ 5

В тестовых проектах Visual Studio 2010, если вы включите опцию развертывания параметров редактирования теста, AppDomain.CurrentDomain.BaseDirectory указывает на папку TestResults\Out (не bin\debug). Хотя, установка по умолчанию указывает на папку bin\debug.

Здесь я нашел убедительный ответ.

Почему AppDomain.CurrentDomain.BaseDirectory не содержит "bin" в приложении asp.net?

Ответ 6

Я обычно использую что-то вроде:

            string AppPath = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase);
            AppPath = AppPath.Replace("file:\\", "");

Ответ 7

Я также прошел через это несколько дней назад, когда я использовал

Environment.CurrentDirectory

поскольку это давало мне проблему на рабочем сервере, но отлично работало с моим локальным сервером,

Итак, я пробовал с помощью

System.AppDomain.CurrentDomain.BaseDirectory;

И он работал у меня как в среде.

Итак, поскольку все они сказали, что мы всегда должны идти с

System.AppDomain.CurrentDomain.BaseDirectory;

поскольку он проверяет каталог текущего домена для пути.

искать дополнительную информацию

Не удалось найти часть ошибки пути на сервере