2009-01-28 74 views
1

我正在使用访问Outlook个人文件夹的获取应用程序。在内部,它将Outlook实例上的个人文件夹挂载并处理邮件,然后卸载pst。卸载pst后,我删除该文件。从Outlook pst文件释放内存时出现问题

现在的问题是,即使在卸载pst和释放内存后,当我尝试删除pst时,我收到一个异常,表示某个进程正在使用此文件,因此无法删除它。这个过程就是前景。我使用下面的代码未安装并释放内存:

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

我检查了很多次,它好像它需要一些时间来释放内存并没有明确的时间讨论这个。任何人可以帮助我如何删除文件?

回答

1

看一看KB234228 ("OL97: Outlook .pst File Lock Release Interval Now Configurable")。这是关于Outlook 97,但我猜测它仍然有效。

我想那FileSystemWatcher不会帮助你,因为没有“排他锁定”事件。

因此,也许你可以创建一个工作线程,它不断尝试删除放入队列中的所有.pst文件。这样,您的应用程序用户界面至少可以不间断地运行。

ProcMon这样的工具能够查看应用程序的文件句柄。也许你可以做一个API调用,让你为Oulook过程做这件事(我猜这是另一个SO问题的好材料)。这样,您不必轮询文件系统,并且可以在锁定消失时更快速地执行操作。

如果你敢,你甚至可以尝试立即关闭相关的文件句柄,不再需要轮询/等待。