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

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

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

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

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

1 ответ

Решение

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

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

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

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

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

Другие вопросы по тегам