我正在开发一个访问Outlook个人文件夹的win应用程序。在内部,它将个人文件夹安装在Outlook实例上并处理邮件,然后卸载pst。卸载pst后,我删除了该文件。
现在的问题是,即使在卸载pst并释放内存之后,当我尝试删除pst时,我得到一个异常,即某个进程正在使用此文件,因此无法删除它。而这个过程就是前景。我正在使用以下代码来卸载和释放内存:
_application.Session.RemoveStore(_personalFolder);
while (System.Runtime.InteropServices.Marshal.ReleaseComObject(_personalFolder) >= 0) ;
_personalFolder = null;
我多次检查过,似乎需要一些时间才能释放内存,而且没有明确的时间。任何人都可以帮我如何删除文件吗?
答案 0 :(得分:1)
看看KB234228 ("OL97: Outlook .pst File Lock Release Interval Now Configurable")。这是关于Outlook 97,但我猜它仍然有效。
我想FileSystemWatcher对你没有帮助,因为没有“独家锁定释放”事件。
所以也许你可以创建一个工作线程,它不断尝试删除你放入队列的所有.pst文件。这样,您的应用程序UI至少可以不间断地继续运行。
像ProcMon这样的工具可以查看应用程序的文件句柄。也许你能够进行一个API调用,允许你为Oulook过程做这个(这是另一个SO问题的好材料,我猜)。这样您就不必轮询文件系统,并且在锁定消失时可以更快地执行操作。
如果你敢,你甚至可以立即尝试关闭有问题的文件句柄,无需轮询/等待。