Outlook 进程在oSession.Logoff()中卡住

Outlook 进程在oSession.Logoff()中卡住,outlook,mapi,outlook-redemption,Outlook,Mapi,Outlook Redemption,Pstcreation在安装outlook的情况下正常工作 现在,我正在尝试使用独立版本的MAPI创建pst文件。但是我的进程被困在oSession.LogOff()中。此外,如果注释oSession.LogOff()行并随后调用CreatePstWithRedemption函数来创建另一个pst,则该过程将卡在oSession.LogonPstStore private bool CreatePstWithRedemption(EmailJTableArgs objJTablArgs, Ema

Pstcreation在安装outlook的情况下正常工作

现在,我正在尝试使用独立版本的MAPI创建pst文件。但是我的进程被困在oSession.LogOff()中。此外,如果注释oSession.LogOff()行并随后调用CreatePstWithRedemption函数来创建另一个pst,则该过程将卡在oSession.LogonPstStore

private bool CreatePstWithRedemption(EmailJTableArgs objJTablArgs, EmailFilterArgs objFilterArgs,
                                     EmailExportRequestParams emailExportRequestParams)
{
    RDOSession oSession = null;
    IRDOStore store = null;
    RDOFolder fFOlder = null;
    RDOFolder childFolder = null;
    IRDOItems folderItems = null;
    var pstCreationStatus = false;
    try
    {
        oSession = new RDOSession();
        store = oSession.LogonPstStore(_fileName, 1, "PST");

        var folderName = Path.GetFileNameWithoutExtension(_fileName);

        if (store != null)
        {
            fFOlder = store.IPMRootFolder;

            foreach (RDOFolder folder in fFOlder.Folders)
            {
                folder.Delete();
            }
            childFolder = fFOlder.Folders.Add(folderName, Type.Missing);
            folderItems = childFolder.Items;


            var resultOfGetEmails = new ResultGetEmails();
            resultOfGetEmails.TotalCount = -1;

            do
            {
                var journalEmails = GetEmailList(objFilterArgs, objJTablArgs, emailExportRequestParams,
                                                 resultOfGetEmails);
                for (var i = 0; i < journalEmails.Count; i++)
                {
                    IRDOMail mail = null;
                    try
                    {
                        mail = folderItems.Add(rdoItemType.olMailItem);

                        // populate mail fields

                        mail.Sent = true;
                        mail.Save();
                    }
                    finally
                    {
                        if (mail != null)
                            Marshal.ReleaseComObject(mail);
                    }
                }

                resultOfGetEmails.TotalCount -= BatchSize;

                objJTablArgs.PageStartIndex += BatchSize;
            } while (resultOfGetEmails.TotalCount > 0);
            pstCreationStatus = true;
        }
    }

    finally
    {
          // Do cleanup
         if (oSession != null && oSession.LoggedOn)
            {
                try
                {
                    oSession.Logoff();
                    Marshal.ReleaseComObject(oSession);
                }
                catch
                {
                }
            }

    }
    return pstCreationStatus;
}
private bool CreatePstWithRedemption(EmailJTableArgs objTableArgs、EmailFilterArgs objFilterArgs、,
EmailExportRequestParams EmailExportRequestParams)
{
RDOSession=null;
IRDOStore存储=空;
RDOFolder fFOlder=null;
RDOFolder childFolder=null;
IRDOItems folderItems=null;
var pstCreationStatus=假;
尝试
{
oSession=新的RDOSession();
store=oSession.LogonPstStore(_文件名,1,“PST”);
var folderName=Path.GetFileNameWithoutExtension(_fileName);
如果(存储!=null)
{
fFOlder=store.IPMRootFolder;
foreach(fFOlder.Folders中的RDOFolder文件夹)
{
folder.Delete();
}
childFolder=fFOlder.Folders.Add(folderName,Type.Missing);
folderItems=childFolder.Items;
var resultOfGetEmails=new ResultGetEmails();
ResultToGetEmails.TotalCount=-1;
做
{
var journalEmails=GetEmailList(objFilterArgs、objJTablArgs、emailExportRequestParams、,
结果获取电子邮件);
对于(var i=0;i0);
pstCreationStatus=真;
}
}
最后
{
//清理
if(oSession!=null&&oSession.LoggedOn)
{
尝试
{
oSession.Logoff();
Marshal.ReleaseComObject(oSession);
}
接住
{
}
}
}
返回pstCreationStatus;
}

注意:在安装了outlook的环境中运行时,同样的方法也能很好地工作。

是否从辅助线程执行此操作?不,只有一个线程。在发现问题之前,您循环创建新会话和注销了多少次?我只创建了一次会话。之后,当pst创建完成并调用注销时,进程将被卡住。如果未调用注销,并且我尝试使用不同的会话创建新pst,则进程将卡在Logonpst中。请与我联系,地址为dimastr.com的Dmitry,我将向您发送Redemption的调试版本。