Проблема с освобождением памяти из PST-файла Outlook

Я работаю над приложением win, которое получает доступ к личным папкам Outlook. Внутри он подключает личную папку к экземпляру Outlook и обрабатывает почту, а затем отключает pst. После размонтирования pst я удаляю этот файл.

Теперь проблема в том, что даже после размонтирования pst и освобождения памяти, когда я пытаюсь удалить pst, я получаю исключение, что какой-то процесс использует этот файл, поэтому его нельзя удалить. И это процесс мировоззрения. Я использую следующий код для размонтирования и освобождения памяти:

 _application.Session.RemoveStore(_personalFolder);
 while (System.Runtime.InteropServices.Marshal.ReleaseComObject(_personalFolder) >= 0) ;
 _personalFolder = null;

Проверял много раз и вроде как будто требуется какое-то время для освобождения памяти и определенного времени для этого нет. Может ли кто-нибудь помочь мне, как удалить файл?


person Kapil    schedule 28.01.2009    source источник


Ответы (1)


Взгляните на KB234228 ("OL97: интервал освобождения PST-файла Outlook теперь настраивается") . Речь идет об Outlook 97, но я предполагаю, что он все еще работает.

Думаю, FileSystemWatcher вам не поможет, поскольку нет события «исключительная блокировка снята».

Так что, возможно, вы можете создать рабочий поток, который постоянно пытается удалить все файлы .pst, которые вы помещаете в очередь. Таким образом, пользовательский интерфейс вашего приложения может, по крайней мере, работать без перебоев.

Такие инструменты, как ProcMon, могут просматривать дескрипторы файлов Приложения. Возможно, вы сможете сделать вызов API, который позволит вам сделать это для процесса Oulook (я думаю, это хороший материал для другого вопроса SO). Таким образом, вам не нужно опрашивать файловую систему, и вы сможете действовать быстрее, когда блокировка снята.

Если вы осмелитесь, вы можете даже попытаться сразу закрыть рассматриваемый дескриптор файла, полностью избавившись от необходимости опроса / ожидания.

person Tomalak    schedule 30.01.2009