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文档,它说如果文件夹是以下文件夹之一,则会出现此错误:
- 该文件夹的用户权限为只读
- 存储提供程序不支持隐藏项
如何确定问题的原因并解决问题?错误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)的任何位置。在这种情况下,我将永远不会遇到权限问题?