【问题标题】:Problem in releasing memory from an Outlook pst file从 Outlook pst 文件释放内存时出现问题
【发布时间】:2023-03-03 02:59:01
【问题描述】:

我正在开发一个访问 Outlook 个人文件夹的 win 应用程序。在内部,它将个人文件夹安装在 Outlook 实例上并处理邮件,然后卸载 pst。卸载 pst 后,我​​删除了该文件。

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

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

我检查了很多次,似乎释放内存需要一些时间,并且没有明确的时间。谁能帮我删除文件?

【问题讨论】:

    标签: com outlook object


    【解决方案1】:

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

    我猜FileSystemWatcher 不会帮助你,因为没有“排他锁释放”事件。

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

    ProcMon 之类的工具确实能够查看应用程序的文件句柄。也许您可以进行 API 调用,允许您为 Oulook 流程执行此操作(我猜,这是另一个 SO 问题的好材料)。这样您就不必轮询文件系统,并且可以在锁定消失时更快地采取行动。

    如果您敢,您甚至可以尝试立即关闭相关文件句柄,从而完全无需轮询/等待。

    【讨论】:

      猜你喜欢
      • 2015-02-06
      • 1970-01-01
      • 2021-11-20
      • 2012-07-17
      • 2014-02-03
      • 2011-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多