【问题标题】:How to release pst file after creating it using Redemption API?使用 Redemption API 创建 pst 文件后如何释放它?
【发布时间】:2018-03-27 14:19:00
【问题描述】:

我只是将消息文件列表转换为组合的 pst。以下是我的代码:

RDOSession pstSession = new RDOSession(); 
RDOPstStore store = null;
var pstPath = "D:\\test\\combined.pst";
store = pstSession.LogonPstStore(pstPath, 1, "combinedPST");
RDOMail rdo_Mail = 
   pstSession.GetMessageFromMsgFile(dr["FullPathOfMessageFile"].ToString());
rdo_Mail.CopyTo(store.IPMRootFolder);
rdo_Mail.Save();
store.Save();
pstSession.Logoff();

这是一个窗体应用程序。运行上面的代码会在 test 文件夹中创建一个文件 combined.pst。当我尝试在outlook中打开这个pst时,outlook提示这个pst当前正被另一个进程使用。从应用程序关闭我的胜利后,可以加载 pst。 我认为兑换 API 正在锁定创建的 PST。我错过了什么?我还需要处理哪些其他对象?

【问题讨论】:

  • 尝试设置 pstSession 并将对象存储为 null
  • 试过但没用。创建一个单独的进程来创建 pst 可能会完成这项工作。

标签: c# outlook-redemption


【解决方案1】:

出于性能原因,PST 提供程序会保留引用和加载的 PST 文件 30 分钟。或者直到 PST 提供程序 dll 本身被卸载(例如,当主机进程终止时)。 您可能想使用http://support.microsoft.com/Default.aspx?kbid=222328 中提到的注册表项

【讨论】:

  • 给定链接中的页面不退出。我不明白。
  • 如果我添加一个单独的控制台项目,在此处添加此逻辑,然后从创建进程的应用程序中访问它。它会起作用吗?那我可以释放创建的 pst 吗?
  • Dmitry Streblechenko,当我创建一个单独的进程时,我遇到了一个问题。 Pst 文件已成功创建,但是当我在 Outlook 2013 中加载此 pst 时,没有任何电子邮件消息,并且 pst 的大小在加载后减小。运行代码时没有任何错误。可能的问题是什么?
  • 这意味着数据没有完全刷新,Outlook 会截断它。确保使用 Marshal.ReleaseComObject 显式释放所有 Redemption 对象,并使用多点表示法 void。
  • 其实看到你的回答我的另一个question.会试试你的解决方案。
【解决方案2】:

创建一个控制台应用程序(exe)并在那里添加创建 pst 的逻辑。稍后执行此 exe,在您的应用程序中创建一个进程。这样生成的pst不会被锁定,可以移动、修改、删除文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-28
    • 1970-01-01
    • 2021-11-20
    • 2012-03-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多