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

时间:2017-09-29 10:37:32

标签: c# outlook vsto outlook-addin

我正在尝试在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进程,但无法获取它们,抛出以下错误消息:

  

操作不可用(HRESULT异常:0x800401E3(MK_E_UNAVAILABLE))

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

我最终修改了我的代码,并将if-else分成了两个try-catches,并带有自己的返回值,但我仍然认为上面的代码应该可用。

1 个答案:

答案 0 :(得分:2)

Outlook是一个单例,因此aeiouAEIOUäöüÄÖÜ将始终有效 - 如果它已经在运行,您将获得该运行对象。

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