Проблема освобождения памяти из файла Outlook PST - PullRequest
1 голос
/ 28 января 2009

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

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

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

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

1 Ответ

1 голос
/ 30 января 2009

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

Полагаю, что FileSystemWatcher вам не поможет, поскольку нет события "исключенная блокировка освобождена".

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

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

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

...