【问题标题】:Why is Outlook crashing when using Office interop?为什么使用 Office 互操作时 Outlook 会崩溃?
【发布时间】:2018-05-16 02:07:51
【问题描述】:

我正在尝试将 Office 互操作与 C# 一起使用,但我遇到了一些困难。执行如下所示的测试似乎可以启动 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 社区 2017 版本 15.2

Office 360​​ - Outlook 版本 1804 内部版本 9226.2156

Windows 10 内部版本 17115.1

编辑:在 Windows 7 上对此进行了测试,无法重现崩溃。我知道我曾在某个时候在 Windows 10 中使用过此功能。我重新安装了我的操作系统,它仍然崩溃。除非有人对如何修复它有任何想法,否则我会将其归结为典型的 Microsoft 用户体验。

【问题讨论】:

  • 您是否让应用可见?
  • @Enigmativity 不确定您的意思。我的应用程序有效。我可以访问 Outlook API 并做任何我想做的事情。问题是,当我从系统托盘实际打开已经运行的 Outlook 时,Outlook 会崩溃 如果 Outlook 是通过我的程序使用互操作 API 启动的。
  • 你打电话给app.Visible = true;吗?
  • 很高兴得到minimal reproducible example
  • @Enigmativity 我做过

标签: c# outlook office365 office-interop


【解决方案1】:

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

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

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

【讨论】:

  • 不怕。这没什么区别。
【解决方案2】:

我知道这是旧的,但我遇到了同样的问题,也许它会在未来帮助某人: 正如 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

【讨论】:

    猜你喜欢
    • 2014-07-25
    • 2011-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-17
    • 1970-01-01
    • 2014-01-12
    相关资源
    最近更新 更多