VSTO 加载项崩溃 Outlook
VSTO addin crash Outlook
我需要循环所有 Outlook 项目并搜索完全填充正则表达式模式(包括所有附件)的字符串。
我知道这是一项大手术,需要大量资源,但项目需要这样做。
我设法制作了一个可以执行此操作的 VSTO 插件,但问题是插件有时会导致 Outlook 挂起。这不是一个好的业务解决方案,它工作不稳定。
在我的代码中,我确保在使用后关闭 COM 对象。
outlookItem.Close(OlInspectorClose.olDiscard);
Marshal.ReleaseComObject(outlookItem);
附件在使用后转化为蒸汽并处理掉。
字符串 AttachSchema = "http://schemas.microsoft.com/mapi/proptag/0x37010102";
byte[] filebyte = null;<br>
PropertyAccessor pacc = attachment.PropertyAccessor;
filebyte = (byte[])pacc.GetProperty(AttachSchema);<br>
流 stream = new MemoryStream(filebyte);
任何人都可以就如何使插件稳定提供一些建议吗?
首先,访问 PR_ATTACH_DATA_BIN
(或任何其他大型 PT_BINARY
属性)可能无法使用 PropertyAccessor
对象(尤其是在在线模式下),因此您可能会更好使用 Attachment.SaveAsFile
然后在必要时将文件加载到内存(或内存映射文件)中。
其次,请记住您只能在主 Outlook 线程上使用 OOM。要 运行 在辅助线程上编写代码,您需要扩展 MAPI(仅限 C++ 或 Delphi)或 Redemption (I am its author - its RDO 对象系列可以在辅助线程上使用。
我需要循环所有 Outlook 项目并搜索完全填充正则表达式模式(包括所有附件)的字符串。
我知道这是一项大手术,需要大量资源,但项目需要这样做。
我设法制作了一个可以执行此操作的 VSTO 插件,但问题是插件有时会导致 Outlook 挂起。这不是一个好的业务解决方案,它工作不稳定。
在我的代码中,我确保在使用后关闭 COM 对象。
outlookItem.Close(OlInspectorClose.olDiscard);
Marshal.ReleaseComObject(outlookItem);
附件在使用后转化为蒸汽并处理掉。
字符串 AttachSchema = "http://schemas.microsoft.com/mapi/proptag/0x37010102";
byte[] filebyte = null;<br>
PropertyAccessor pacc = attachment.PropertyAccessor;
filebyte = (byte[])pacc.GetProperty(AttachSchema);<br>
流 stream = new MemoryStream(filebyte);
任何人都可以就如何使插件稳定提供一些建议吗?
首先,访问 PR_ATTACH_DATA_BIN
(或任何其他大型 PT_BINARY
属性)可能无法使用 PropertyAccessor
对象(尤其是在在线模式下),因此您可能会更好使用 Attachment.SaveAsFile
然后在必要时将文件加载到内存(或内存映射文件)中。
其次,请记住您只能在主 Outlook 线程上使用 OOM。要 运行 在辅助线程上编写代码,您需要扩展 MAPI(仅限 C++ 或 Delphi)或 Redemption (I am its author - its RDO 对象系列可以在辅助线程上使用。