如何使用Interop C#启动或附加到Outlook?

如何使用Interop C#启动或附加到Outlook?,c#,outlook,com,interop,C#,Outlook,Com,Interop,我正在尝试编写一个C#程序,如果Outlook没有运行,它将启动一个新的Outlook实例;如果第一个实例碰巧已经运行,它将附加到第一个实例 我发现之前的一次讨论基本上确定了我想要实现的目标。的问题是,我的一些Outlook插件/外接程序不能正常工作,例如iManager文件站点/工作站点。Outlook启动时,插件似乎在功能区中,但某些功能缺失,如果我尝试搜索等,Outlook将停止响应并崩溃。如果从控制台或类似设备启动outlook,插件将正常工作: System.Diagnostics.P

我正在尝试编写一个C#程序,如果Outlook没有运行,它将启动一个新的Outlook实例;如果第一个实例碰巧已经运行,它将附加到第一个实例

我发现之前的一次讨论基本上确定了我想要实现的目标。的问题是,我的一些Outlook插件/外接程序不能正常工作,例如iManager文件站点/工作站点。Outlook启动时,插件似乎在功能区中,但某些功能缺失,如果我尝试搜索等,Outlook将停止响应并崩溃。如果从控制台或类似设备启动outlook,插件将正常工作:

System.Diagnostics.Process.Start(@"OUTLOOK.exe");
但是我永远无法连接到正在运行的Outlook实例,因为

application = Marshal.GetActiveObject("Outlook.Application") as Outlook.Application;

由于COM错误而失败(0x800401E3 MK_E_不可用)。我只能在调试应用程序并逐步解决该问题时才能绕过此错误。我尝试过让Outlook有时间启动,切换活动窗口(更改焦点),但这些选项都不起作用。

来自GetActiveObject的错误消息很可能表示您的代码和Outlook正在不同的安全上下文中运行。确保两个应用(或两者)都没有以提升的权限运行(以管理员身份运行)

我已签入任务管理器,两者都仅以用户权限运行,即使您使用“以管理员身份运行”,它们也会以用户权限运行。这两个应用程序是如何启动的?我已经测试过从控制台(非管理员)和Visual Studio调试器(非管理员)启动应用程序。从VS开始仅当我跨过GetActiveObject行时有效,否则会出现COM错误(这就是我尝试切换窗口焦点的原因)从outlook中删除您的帐户。清除outlook的PST文件。在安全模式下打开outlook。添加您的帐户并等待所有文件夹更新。关闭并打开Outlook。请尝试再次执行问题中提到的相同操作。