C# 为什么Outlook在使用Office互操作时崩溃?
我试图利用Office与C#的互操作,但遇到了一些困难。执行一个像我在下面介绍的那样的测试似乎可以启动Outlook并与之连接。问题是,如果我随后尝试打开Outlook窗口(它开始隐藏在托盘中),我会从Outlook收到一条错误消息,说应用程序无法正确启动(0xc0000142)。如果启动应用程序之前Outlook已经运行,我不会收到此错误。我是做错了什么,还是什么东西坏了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
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.ApplicationOulook.Application olApp=Marshal.GetActiveObject(“outlook.Application”)代码>下面的链接有一个很好的例子:
恐怕不行。这没什么区别。你让应用程序可见了吗?@Enigmativity不知道你的意思。我的应用程序工作正常。我可以访问Outlook API并执行任何我想要的操作。问题是,当我从系统托盘实际打开已经运行的Outlook时,如果Outlook是使用interop API通过我的程序启动的,Outlook会崩溃。是否调用app.Visible=true代码>?如果能得到一份神秘感就太好了。@Enigmativity我做到了。