C# 设置RDOPstStore属性时发生MAPI_E_NO_访问错误

C# 设置RDOPstStore属性时发生MAPI_E_NO_访问错误,c#,outlook,outlook-redemption,C#,Outlook,Outlook Redemption,我正试图使用以下命令在PST文件上设置(实际上清除)PR_PST_PASSWORD属性: RDOSession session = new RDOSession(); RDOPstStore store = session.LogonPstStore(sourcePstPath,Type.Missing,Type.Missing,password); Int32 PR_PST_PASSWORD = 0x67ff0003; store.Fields[PR_PST_PASSWORD] = 0x000

我正试图使用以下命令在PST文件上设置(实际上清除)PR_PST_PASSWORD属性:

RDOSession session = new RDOSession();
RDOPstStore store = session.LogonPstStore(sourcePstPath,Type.Missing,Type.Missing,password);
Int32 PR_PST_PASSWORD = 0x67ff0003;
store.Fields[PR_PST_PASSWORD] = 0x00000000;
最后一行引发此异常:

System.UnauthorizedAccessException was unhandled
HResult=-2147024891
Message=Error in HrSetOneProp: MAPI_E_NO_ACCESS

有什么方法可以设置此属性吗?

首先,在添加PST存储时配置PST服务时,需要提供PST密码。它肯定不是作为存储本身的属性存储的。你在《了望台间谍》里看到那片土地了吗


其次,我从未见过0x67ff0003属性。我知道PR_FAIMsgFolderPropTagArray和PR_ServerName属性,但它们是PT_BINARY(0x67FF0102)类型,而不是PT_LONG。

您是使用多线程运行它吗。。。?如果是这样的话,这听起来像是问题和/或问题。不,是单线程的。根据MSDN,PidTagPstPassword属性存储密码文本的散列(请参阅)。根据ASPOSE.Email文档()我可以查询此属性以判断它是否受密码保护。我需要清除此属性,以便进程可以在pst文件的下游运行。有没有办法用救赎来解决这个问题?谢谢Dmitry。IMsgStore MAPI对象上没有显示该属性。它只存储在PST文件本身中。由于Aspose不使用MAPI访问PST文件,因此可以将其作为单独的属性公开。MSPST提供程序不会这样做-您只能在将PST添加到配置文件时更改密码-MSPST提供程序允许您指定旧密码和新密码。谢谢Dmitry。您说“您只能在将PST添加到配置文件时更改密码”-有没有一种方法可以通过Redemption来做到这一点?Redemption不明确支持这一点,但您可以使用旧密码调用RDOSession.Stores.AddPstStoreWithPassword,删除存储,然后尝试使用新密码调用AddPstStoreWithPassword。