我正在尝试在Excel的加载项中获取Outlook应用程序对象。
如果有一个正在运行的Outlook实例,它应该得到它,如果没有,它应该使用Outlook对象模型创建一个。
这是我现在的代码:
public static Outlook.Application GetApplicationObject()
{
Outlook.Application application = null;
if (Process.GetProcessesByName("OUTLOOK").Count() > 0)
{
application = Marshal.GetActiveObject("Outlook.Application") as Outlook.Application;
}
else
{
application = new Outlook.Application();
}
return application;
}
我的问题:它找到Outlook进程,但无法获取它们,抛出以下错误消息:
操作不可用(HRESULT异常:0x800401E3(MK_E_UNAVAILABLE))
我尝试一步一步地调试它,并监视任务管理器。我可以看到我有一个Outlook实例,但它只是任务栏右侧的一个图标。这是否意味着实例尚未完全加载,并且无法访问它以从中获取Application对象?
我最终修改了我的代码,并将if-else分成了两个try-catches,并带有自己的返回值,但我仍然认为上面的代码应该可用。
答案 0 :(得分:2)
Outlook是一个单例,因此aeiouAEIOUäöüÄÖÜ
将始终有效 - 如果它已经在运行,您将获得该运行对象。
确保两个应用程序(Excel和Outlook)在同一安全上下文中运行。应用程序是否以提升的权限运行(以管理员身份运行)?