C# 在 VSTO 加载项中获取 运行 Outlook 实例

C# Get running Outlook instance in VSTO add-in

我正在尝试在我的 Excel.

加载项中获取 Outlook 应用程序对象

如果有 运行 Outlook 实例,它应该得到那个,如果没有,它应该使用 Outlook 对象模型创建一个。

这是我现在拥有的代码:

public static Outlook.Application GetApplicationObject()
{
    Outlook.Application application = null;

    if (Process.GetProcessesByName("OUTLOOK").Count() > 0)
    {
        application = Marshal.GetActiveObject("Outlook.Application") as Outlook.Application;
    }
    else
    {
        application = new Outlook.Application();
    }
    return application;
}

我的问题:它找到 Outlook 进程,但无法获取它们,抛出以下错误消息:

Operation unavailable (Exception from HRESULT: 0x800401E3 (MK_E_UNAVAILABLE))

我试着一步步调试,监控任务管理器。我可以看到我有一个 Outlook 实例,但它只是任务栏右侧的一个图标。这是否意味着实例尚未完全加载,无法访问它以从中获取 Application 对象?

我最终修改了我的代码,并将 if-else 分成 2 个 try-catch,它们各自 returns,但我仍然认为上面的代码应该可用。

Outlook 是单例,因此 new Outlook.Application() 将始终有效 - 如果它已经是 运行,您将获得 运行 对象。

确保两个应用程序(Excel 和 Outlook)都 运行 在相同的安全上下文中。任一应用 运行 是否提升了权限(运行 作为管理员)?