com - ruta - Problema al liberar memoria de un archivo pst de Outlook
reparar archivo pst (1)
Estoy trabajando en una aplicación para ganar que accede a las carpetas personales de Outlook. Internamente, monta la carpeta personal en la instancia de Outlook y procesa los correos y luego desmonta el pst. Después de desmontar el pst, elimino ese archivo.
Ahora el problema es que incluso después de haber montado el pst y liberado la memoria, cuando intento eliminar el pst, recibo una excepción de que algún proceso está usando este archivo para que no se pueda eliminar. Y ese proceso es perspectiva. Estoy usando el siguiente código para montar y liberar memoria:
_application.Session.RemoveStore(_personalFolder);
while (System.Runtime.InteropServices.Marshal.ReleaseComObject(_personalFolder) >= 0) ;
_personalFolder = null;
Lo comprobé muchas veces y parece que lleva algo de tiempo liberar la memoria y no hay un tiempo definido para esto. ¿Alguien podría ayudarme a eliminar el archivo?
Eche un vistazo a KB234228 ("OL97: Outlook .pst File Lock Release Interval Now Configurable") . Se trata de Outlook 97, pero creo que todavía funciona.
Supongo que FileSystemWatcher no lo ayudará, ya que no hay ningún evento de "bloqueo exclusivo liberado".
Así que tal vez puedas crear un hilo de trabajo, que intente continuamente eliminar todos los archivos .pst que coloques en una cola. De esta forma, la IU de su aplicación puede al menos continuar ininterrumpidamente.
Herramientas como ProcMon tienen la capacidad de mirar los manejadores de archivos de las aplicaciones. Tal vez puedas hacer una llamada API que te permita hacer eso para el proceso Oulook (ese es un buen material para otra pregunta SO, supongo). De esta forma no tiene que sondear el sistema de archivos, y puede actuar más rápidamente cuando el bloqueo se haya ido.
Si te atreves, incluso podrías tratar de cerrar el archivo manejador en cuestión de inmediato, eliminando la necesidad de sondear / esperar por completo.