Поиск текущего каталога во время сеанса отладки Visual Studio?
Как найти текущий каталог для приложения.NET, работающего под отладчиком Visual Studio?
Обновление 1. Чтобы было ясно: я не хочу менять код или получать информацию в самой программе - я просто хочу получить информацию о приложении, которое в настоящее время отлаживается.
При отладке приложения.NET Windows Forms (смешанные VB.NET и C#) я не был уверен, из какого места читается файл XML. Я ожидал, что текущий каталог будет каталогом приложения. Однако, используя Process Explorer, свойства для процесса приводят к:
D: \ Program Files (x86) \ Microsoft Visual Studio 9.0 \ Common7 \
(щелкните правой кнопкой мыши по процессу / Свойства / вкладка Изображение / Текущий каталог).
При наведении курсора на процесс в главном окне Process Explorer был получен другой результат (см. Скриншот ниже):
D: \ dproj \ DTASCall \ DTASuperCharge \ Bin \
Что правильно?
При запуске приложения в автономном режиме отображается ожидаемый текущий каталог,
D: \ dproj \ DTASCall \ DTASuperCharge \ Bin \
в окне свойств процесса Process Explorer.
Аннотированный снимок экрана Process Explorer:
http://www.pil.sdu.dk/1/until2039-12-31/PEdiscrepancy_2009-09-02.png
3 ответа
В Visual Studio, в настройках проекта на вкладке отладки, вы можете установить "Рабочий каталог", если хотите.
Чтобы определить текущий рабочий каталог в коде или в ближайшем окне в точке останова, попробуйте
System.IO.Directory.GetCurrentDirectory()
В вашем коде вызовите функцию
System.IO.Directory.GetCurrentDirectory()
По умолчанию, если вы не изменили свойства Debug вашего проекта, текущий каталог будет запускаться как каталог bin\Debug вашего проекта (откуда запускается.exe).
Лучший способ - запустить приложение в WinDbg (отладчик Windows), затем подключиться к процессу и запустить !handle
команда. Каждый открытый файл будет иметь связанный дескриптор. Сбросив все дескрипторы для соответствующего процесса, вы увидите соответствующий путь к файлу.
Вот пример:
!handle 0 f process-id
Замените идентификатор процесса значением вашего идентификатора процесса. Вместо идентификатора процесса вы также можете использовать адрес процесса. Если это не показывает объект файла, то дескриптор файла уже был закрыт. В этом случае вам нужно отследить ручки. Это можно сделать с помощью !htrace
команда.