使用对象模型时 Outlook 2010 中的已知问题

原始 KB 数: 2265515

总结

本文介绍使用 Microsoft Outlook 2010 对象模型时可能发生的已知问题。

无法从提升权限的进程创建 Outlook.Application 对象

不能通过在 Windows Vista、Windows 7 或其他任何允许以提升权限运行的进程的操作系统中,使用以提升权限运行的进程来自动化 Outlook。 这是 COM 的基础限制。 Outlook 和用于自动化 Outlook 的自定义程序必须在相同的完整性级别上运行。

BeforeItemMove 和 BeforeFolderMove 事件不会发生

存在多个情形,在这些情况下事件 BeforeItemMoveBeforeFolderMove 不会发生。 已知方案包括从 To-Do 栏中删除约会、从日历和 To-Do 栏中删除会议、对非默认文件夹实现事件,以及使用“忽略对话”命令删除项目。 这些问题已在 2010 年 12 月 Outlook 2010 累积更新中修复。

GetProperty 方法在联机模式下失败

如果您在联机模式下使用 Microsoft Exchange 2010,并且使用 GetProperty 方法从未保存的项目检索属性,则该方法可能会失败。 这是因为 Exchange 2010 处理命名属性的方式发生了更改。 Outlook 2007 也受到影响。 当前解决方法包括:

  • 在缓存模式下使用 Outlook。
  • 在调用 GetProperty 该方法之前,请确保该项处于保存状态。

检查器窗口可能无法正确关闭

如果在 Microsoft Visual Studio Tools for Microsoft 办公室 (VSTO)中实现该GetVisibleCallback函数,则用户可能无法正确关闭检查器窗口。 此问题已在 2011 年 2 月 Outlook 2010 累积更新中修复。

BeforeCheckNames 事件发生的时间与它在 Outlook 2007 中发生的时间不同。

在 Outlook 2010 中,BeforeCheckNames 事件发生在解析收件人之后,而不是之前。 这意味着取消事件不起作用。 此问题在 Outlook 2010 2011 年 2 月累积更新中更正。

视图对象模型可能与用户界面中的实际视图不对应

在某些情况下,如果以编程方式更改视图或检索视图设置,则对象模型中的设置可能与 Outlook 在用户界面中显示的实际视图设置不对应。 Outlook 2010 2011 年 2 月累积更新进行了改进,以解决此问题。

使用“插入项目”窗口时,附件无法正确管理

如果使用 Outlook 对象模型添加和删除附件,如果用户使用“插入项”命令插入项目附件,则可能具有额外的附件。 这是因为对话框中存在一个缺陷,使得所有附件都被视为可疑,即使它们实际上并不可疑。 因此,额外的附件与邮件一起保存。 此问题已在 2010 年 2 月 Outlook 2010 累积更新中修复。

无法使用 POP/IMAP 帐户插入项目附件

如果使用 Attachments.Add 此方法通过 POP/IMAP 帐户添加 Outlook 项目附件,则调用将失败。 此问题已在 Outlook 2010 的 2010 年 12 月累积更新中修复。

MailItem.Recipients.ResolveAll 函数删除“收件人”字段中的邮件接收者

如果用户在撰写模式下将未解析的收件人添加到邮件,然后 Recipients.ResolveAll 为该项目调用该方法,则会删除收件人。 没有计划更改此行为。

“已发送邮件”文件夹中的会议请求方法出现故障。

如果尝试从“已发送邮件”文件夹中的会议请求中检索约会,呼叫将失败。 此问题已在 2011 年 2 月 Outlook 2010 累积更新中修复。

如果检查器窗口处于打开状态,则约会数据可能不会更新

由于 Outlook 2010 处理和缓存约会的方式发生了内部更改,如果相应的约会在检查器窗口中打开,则对象模型可能无法提供有关约会异常的最新信息。 即使您取消引用并重新从存储中检索该项,此行为也会发生。 若要解决此问题,请确保约会窗口已关闭。 没有计划更改此行为。

如果尝试从对象 NavigationFolder 获取 Folder 对象,可能会收到“操作失败”错误消息。 Outlook 2010 中新增的共享日历文件夹功能会出现此问题。 在 Outlook 初始化 NavigationFolder.Folder 对象之前检索会导致此问题发生。 默认情况下不会进行此初始化。 若要解决此问题,请先引用默认日历文件夹并调用 GetExplorer 该方法。 这间接导致 Outlook 初始化共享日历。 以下 Outlook VBA 代码示例演示了此问题和解决方法:

Sub GetCalendars()
  ' Work around
  Set oCalFolder = Session.GetDefaultFolder(olFolderCalendar)
  Set oCalExp = oCalFolder.GetExplorer

  Dim oModules As Outlook.CalendarModule
  Dim oMyCalendarGroup As Outlook.NavigationGroup
  Dim oPeopleNavGroup As Outlook.NavigationGroup
  Set oModules = ActiveExplorer.NavigationPane.Modules.GetNavigationModule(OlNavigationModuleType.olModuleCalendar)
  Set oMyCalendarGroup = oModules.NavigationGroups.GetDefaultNavigationGroup(OlGroupType.olMyFoldersGroup)
  Set oPeopleNavGroup = oModules.NavigationGroups.GetDefaultNavigationGroup(OlGroupType.olPeopleFoldersGroup)
  GetNavFolders oMyCalendarGroup
  GetNavFolders oPeopleNavGroup
End Sub

Private Sub GetNavFolders(ByVal obj As Outlook.NavigationGroup)
  Set oNavFolders = obj.NavigationFolders
  Dim oNavFolder As Outlook.NavigationFolder
  For Each oNavFolder In oNavFolders
    Debug.Print oNavFolder.DisplayName & "==>" & oNavFolder.Folder ' <-- this errors
  Next
End Sub