Поиск текущего каталога во время сеанса отладки Visual Studio?

Как найти текущий каталог для приложения .NET работает под отладчиком Visual Studio?

Обновление 1. Быть ясным: я не хочу менять код или получить информацию в самой программе - я просто хочу получить информацию о приложении в настоящее время отлажено.

При отладке приложения .NET Windows Forms (смешанные VB.NET и С#) Я не был уверен, откуда находится файл 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:

Alt текст http://www.pil.sdu.dk/1/until2039-12-31/PEdiscrepancy_2009-09-02.png

Ответы

Ответ 1

В Visual Studio в настройках проекта на вкладке отладки вы можете установить "Рабочий каталог", если хотите.

Чтобы определить текущий рабочий каталог в коде или в ближайшем окне в точке останова, попробуйте

System.IO.Directory.GetCurrentDirectory()

Ответ 2

Внутри вашего кода вызовите функцию

System.IO.Directory.GetCurrentDirectory()

По умолчанию, если вы не изменили свойства Debug вашего проекта, текущий каталог запустится как каталог bin\Debug вашего проекта (откуда запускается .exe).

Ответ 3

Лучший способ - запустить приложение в WinDbg (отладчик Windows), затем подключиться к процессу и запустить !handle. Каждый открытый файл будет иметь связанный дескриптор. Сбрасывая все ручки для соответствующего процесса, вы увидите соответствующий путь к файлу.

Вот пример:

!handle 0 f process-id

Замените идентификатор процесса на значение идентификатора процесса. Вместо идентификатора процесса вы также можете использовать адрес процесса. Если это не показывает объект файла, то дескриптор файла уже закрыт. В этом случае вам нужно отследить ручки. Это можно сделать с помощью команды !htrace.