我试图运行此代码:
this.storage =
Application.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderContacts)
.GetStorage("ws_up_storage", Outlook.OlStorageIdentifierType.olIdentifyByMessageClass);
它在某些机器上运行得非常好,但在其他机器上却抛出了这个例外:
我还尝试了其他文件夹名称,例如olFolderInbox
,olFolderCalendar
。我已经为此查看了Microsoft文档,并且如果该文件夹是以下之一,则表示会出现此错误:
可悲的事实是,我不知道如何检查这些中的哪一个是真的,以及它是否可能。
我如何确定问题的原因并解决问题?
答案 0 :(得分:2)
错误0x80040102是MAPI_E_NO_SUPPORT,这意味着商店不支持隐藏(关联)项。
使用PropertyAccessor.GetProperty读取PR_MDB_PROVIDER
属性(DASL名称http://schemas.microsoft.com/mapi/proptag/0x34140102
)。返回的16字节数组将特定于每种商店类型。例如。对于Exchange存储,它将是pbExchangeProviderPrimaryUserGuid
(5494A1C0297F101BA58708002B2A2517)。使用OutlookSpy(单击IMessage,IMAPIFolder或IMsgStore)查看相关商店中的任何对象,以查看PR_MDB_PROVIDER
属性。
答案 1 :(得分:0)
处理所有这些情况的最简单方法是尝试获取存储空间。您需要付出很多努力来实施所有案例。 PR_MDB_PROVIDER
属性允许识别商店提供商,但不是所有情况,例如文件夹的用户权限等。您可以使用try / catch块检查错误代码 - 0x80040102(MAPI_E_NO_SUPPORT)。
但是,您可以使用任何低级属性查看器(例如,免费的开源工具 - MFCMAPI)来探索扩展MAPI属性值。因此,您可能会发现所有必需的信息都不受支持。