使用Office互操作时为什么Outlook崩溃?

时间:2018-05-16 02:07:51

标签: c# outlook office365 office-interop

我正在尝试使用C#的Office互操作,但我遇到了一些困难。执行像我下面包含的那样的测试似乎可以工作,因为它启动Outlook并且似乎与它连接。问题是,如果我然后尝试打开Outlook窗口(它开始隐藏在托盘中)我收到来自Outlook的错误消息说The application was unable to start correctly (0xc0000142).如果在我启动应用程序之前Outlook已经运行,我不会收到此错误。我做错了什么事还是坏了什么?

using System;
using Outlook = Microsoft.Office.Interop.Outlook;

namespace OutlookInteropTest1
{
    class Program
    {
        static void Main(string[] args)
        {
            var app = new Outlook.Application();
            Console.ReadKey();
        }
    }
}

Visual Studio Community 2017版本15.2

Office 360​​ - Outlook版本1804 Build 9226.2156

Windows 10 Build 17115.1

编辑:在Windows 7上对此进行了测试,无法重现崩溃。我知道我在某些时候在Windows 10中工作过。我重新安装了我的操作系统,它仍然崩溃。除非有人对如何解决这个问题有任何想法,否则我会把这种情况归结为典型的微软用户体验。

2 个答案:

答案 0 :(得分:1)

我知道这很老了,但是我遇到了同样的问题,也许将来会对某人有所帮助: 如IAmRajshah所述,Outlook只能运行一种,因此,如果Outlook打开,您的代码olApp = new Outlook.Application();将崩溃,则需要使用Oulook.Application olApp = Marshal.GetActiveObject("Outlook.Application") as Outlook.Application;这样的东西来“连接”到Outlook的活动实例。下面的链接提供了一个很好的示例:

Get and sign in to an instance of Outlook

答案 1 :(得分:0)

Outlook是一个单例,因此如果Outlook已在运行,则创建一个新对象将返回现有对象。

在您的情况下,您还需要为其提供命名空间

olApp = new Outlook.Application();
Outlook.Namespace ns = olApp.GetNamespace("MAPI");
ns.Logon();