C# 无法在Outlook加载项中创建StorageItem

C# 无法在Outlook加载项中创建StorageItem,c#,outlook,outlook-addin,C#,Outlook,Outlook Addin,我正在尝试运行以下代码: this.storage = Application.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderContacts) .GetStorage("ws_up_storage", Outlook.OlStorageIdentifierType.olIdentifyByMessageClass); 它在某些机器上运行得非常好,但在其他机器上会引发以下异常:

我正在尝试运行以下代码:

this.storage =
            Application.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderContacts)
           .GetStorage("ws_up_storage", Outlook.OlStorageIdentifierType.olIdentifyByMessageClass);
它在某些机器上运行得非常好,但在其他机器上会引发以下异常:

我还尝试了其他文件夹名称,如
olFolderInbox
olFolderCalendar
。我已经查看了Microsoft文档,它说如果文件夹是以下文件夹之一,则会出现此错误:

    文件夹是微软Exchange公用文件夹、Internet消息访问协议(IMAP)、MSN Hotmail或微软SharePoint基础文件夹。
  • 该文件夹的用户权限为只读
  • 存储提供程序不支持隐藏项
可悲的事实是,我不知道如何检查哪一个是正确的,如果它是在所有可能的


如何确定问题的原因并解决问题?

错误0x80040102是MAPI\u E\u NO\u支持,这意味着存储不支持隐藏(关联)项


阅读
PR\u MDB\u提供程序
属性(DASL名称
http://schemas.microsoft.com/mapi/proptag/0x34140102
)使用PropertyAccessor.GetProperty。返回的16字节数组将特定于每种存储类型。例如,对于Exchange存储,它将是
pbExchangeProviderPrimaryUserGuid
(5494A1C0297F101BA58708002B2A2517)。使用(单击IMessage、IMAPIFolder或IMsgStore)查看相关存储中的任何对象,以查看
PR\u MDB\u PROVIDER
属性。

处理所有这些情况的最简单方法是尝试获取存储。您需要付出很大的努力来实施所有案例。
PR\u MDB\u PROVIDER
属性允许标识存储提供程序,但不是所有情况,例如文件夹的用户权限等。您可以使用try/catch块检查错误代码-0x80040102(MAPI\u E\u NO\u支持)


但是,您可以使用任何低级属性查看器(例如,免费的开源工具-MFCMAPI)来探索扩展的MAPI属性值。因此,您可以找到有关不受支持场景的所有必需信息

我已经下载了这个工具,看起来很精致。但是我看不到我要找的确切属性,而且我仍然不太明白如何判断存储有什么问题以及我应该怎么做。当你单击IMsgStore或IMessage按钮时,你看不到PR_MDB_PROVIDER属性?谢谢你的回复。我已经查看了您在有问题的PC和加载项工作的PC上提到的属性,在这两种情况下,它都是相同的id:不确定如何处理。您看到的值是什么?它不是链接-它是需要传递给GetProperty的DASL属性名。这听起来非常痛苦。在outlook中存储自定义数据的简单方法是什么?您可以使用windows注册表保存任何信息。或者只是在磁盘上创建一个单独的文件来存储需要存储的信息。为什么需要在Outlook中保存数据?My addin是另一个服务的网关,可通过登录令牌访问该服务。我不希望用户在会话之间重新输入令牌。您可以使用BCL类加密数据,并将其存储在磁盘或windows注册表(HKCU)的任何位置。在这种情况下,我将永远不会遇到权限问题?