我正在尝试使用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中工作过。我重新安装了我的操作系统,它仍然崩溃。除非有人对如何解决这个问题有任何想法,否则我会把这种情况归结为典型的微软用户体验。
答案 0 :(得分:1)
我知道这很老了,但是我遇到了同样的问题,也许将来会对某人有所帮助:
如IAmRajshah所述,Outlook只能运行一种,因此,如果Outlook打开,您的代码olApp = new Outlook.Application();
将崩溃,则需要使用Oulook.Application olApp = Marshal.GetActiveObject("Outlook.Application") as Outlook.Application;
这样的东西来“连接”到Outlook的活动实例。下面的链接提供了一个很好的示例:
答案 1 :(得分:0)
Outlook是一个单例,因此如果Outlook已在运行,则创建一个新对象将返回现有对象。
在您的情况下,您还需要为其提供命名空间
olApp = new Outlook.Application();
Outlook.Namespace ns = olApp.GetNamespace("MAPI");
ns.Logon();