有谁知道为什么救赎无法成功登录?
我正在做的是删除新创建的PST中的默认文件夹。这不是任何内部机器的问题,但在客户的机器上,他们得到以下错误。
异常源:Redemption.RDOSessionException。 Redemption.RDOSessionException类型: System.Runtime.InteropServices.COMExceptionException Message: Not logged on. 请先登录Exception目标站点。登出
public static void DeleteStoreFolders(string sStorePath)
{
RDOSession session = null;
RDOPstStore RDOstore = null;
try
{
_logger.LogDebug("init RDOSession");
session = RedemptionLoader.new_RDOSession();
_logger.LogDebug("RDOSession created");
_logger.LogDebug("Logging into store: " + sStorePath);
RDOstore = session.LogonPstStore(sStorePath);
_logger.LogDebug("Logged into store: " + sStorePath);
foreach (RDOFolder folder in RDOstore.IPMRootFolder.Folders)
{
_logger.LogDebug("Deleting folder " + folder);
folder.Delete();
_logger.LogDebug("Folder " + folder + " deleted");
if (folder != null)
Marshal.FinalReleaseComObject(folder);
}
}
catch (Exception ex)
{
_logger.LogError("Unable to delete default folders. " + ex.StackTrace);
}
finally
{
if (session != null)
{
session.Logoff();
Marshal.FinalReleaseComObject(session);
}
if (RDOstore != null)
Marshal.FinalReleaseComObject(RDOstore);
}
}
这将是伟大的,除了异常细节,看到问题机器上生成的日志。
此外,我建议更换 FinalReleaseComObject
方法与 ReleaseComObject
的。的。Marshal.FinalReleaseComObject 方法通过将Runtime Callable Wrapper (RCW)的引用计数设置为0来释放所有引用。 这其实不是一个好主意。这个 Marshal.ReleaseComObject 方法减少与指定COM对象相关联的Runtime Callable Wrapper(RCW)的引用计数。所以,如果你增加了引用计数器,你需要相应地减少它,而不是将它设为零!如果你增加了引用计数器,你需要将它相应地减少,而不是将它设为零。