【问题标题】:How to start or attach to Outlook using Interop C#?如何使用 Interop C# 启动或附加到 Outlook?
【发布时间】:2017-02-08 07:04:18
【问题描述】:

我正在尝试编写一个 C# 程序,如果没有一个 Outlook 实例正在运行,它将启动一个新实例,或者如果它恰好已经在运行,则附加到第一个实例。

我发现以前的讨论already 几乎确定了我想要实现的目标。 Microsoft Solution 的问题是我的一些 Outlook 插件/加载项无法正常工作,例如 iManage Filesite/Worksite。 Outlook 启动时,该插件似乎在功能区中,但缺少某些功能,如果我尝试搜索等。Outlook 停止响应并崩溃。如果从控制台或类似方式启动 Outlook,则插件可以正常工作:

System.Diagnostics.Process.Start(@"OUTLOOK.exe");

但是我永远无法附加到正在运行的 Outlook 实例,因为

application = Marshal.GetActiveObject("Outlook.Application") as Outlook.Application;

失败并出现 COM 错误 (0x800401E3 MK_E_UNAVAILABLE)。如果我调试应用程序并逐步完成它,我只能绕过这个错误。我尝试让 Outlook 有时间启动,切换活动窗口(改变焦点),但这些选项都不起作用。

【问题讨论】:

  • 从 Outlook 中删除您的帐户。清除outlook的PST文件。在安全模式下打开 Outlook。添加您的帐户并等待所有文件夹更新。关闭并打开 Outlook。尝试再次执行问题中提到的相同操作。

标签: c# outlook com interop


【解决方案1】:

来自 GetActiveObject 的错误消息很可能意味着您的代码和 Outlook 在不同的安全上下文中运行。确保两个应用程序(或两者)都没有以提升的权限运行(以管理员身份运行)。

【讨论】:

  • 我已经在任务管理器中签入,两者都仅以用户权限运行
  • 即使您使用“以管理员身份运行”也会如此。这两个应用程序是如何启动的?
  • 我已经测试了从控制台(非管理员)和 Visual Studio 调试器(非管理员)启动应用程序。只有当我越过 GetActiveObject 行时,从 VS 开始才有效,否则我会收到 COM 错误(这就是我尝试切换窗口焦点的原因)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-02
相关资源
最近更新 更多