Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么Outlook在使用Office互操作时崩溃?_C#_Outlook_Office365_Office Interop - Fatal编程技术网

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

C# 为什么Outlook在使用Office互操作时崩溃?,c#,outlook,office365,office-interop,C#,Outlook,Office365,Office Interop,我试图利用Office与C#的互操作,但遇到了一些困难。执行一个像我在下面介绍的那样的测试似乎可以启动Outlook并与之连接。问题是,如果我随后尝试打开Outlook窗口(它开始隐藏在托盘中),我会从Outlook收到一条错误消息,说应用程序无法正确启动(0xc0000142)。如果启动应用程序之前Outlook已经运行,我不会收到此错误。我是做错了什么,还是什么东西坏了 using System; using Outlook = Microsoft.Office.Interop.Outloo

我试图利用Office与C#的互操作,但遇到了一些困难。执行一个像我在下面介绍的那样的测试似乎可以启动Outlook并与之连接。问题是,如果我随后尝试打开Outlook窗口(它开始隐藏在托盘中),我会从Outlook收到一条错误消息,说应用程序无法正确启动(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内部版本9226.2156

Windows10版本17115.1


编辑:在Windows 7上对此进行了测试,无法再现崩溃。我知道我曾经在Windows10中使用过它。我重新安装了操作系统,但它仍然崩溃。除非任何人对如何修复它有任何想法,否则我将把它塞进典型的Microsoft用户体验中。

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

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

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

我知道这很老了,但我也遇到了同样的问题,也许这会对将来的人有所帮助: 正如Iamrajsah所提到的,outlook只能运行一次,因此,如果outlook打开,则代码
olApp=new outlook.Application()
将崩溃,您需要“连接”到outlook的活动实例,并使用类似以下内容作为outlook.Application
Oulook.Application olApp=Marshal.GetActiveObject(“outlook.Application”)下面的链接有一个很好的例子:


恐怕不行。这没什么区别。你让应用程序可见了吗?@Enigmativity不知道你的意思。我的应用程序工作正常。我可以访问Outlook API并执行任何我想要的操作。问题是,当我从系统托盘实际打开已经运行的Outlook时,如果Outlook是使用interop API通过我的程序启动的,Outlook会崩溃。是否调用
app.Visible=true?如果能得到一份神秘感就太好了。@Enigmativity我做到了。