COMException(0x800401E3):具有计划任务的操作不可用(来自HRESULT的异常:0x800401E3(MK_E_UNAVAILABLE))

时间:2015-11-05 12:05:51

标签: c# outlook com-interop

在网上搜索没有成功,这是我的问题。

我有一项任务,我想安排从outlook检索电子邮件的附件并提取数据。 当我手动启动任务时,它工作正常,但每当我尝试通过计划任务启动它时,它都会失败并显示错误:

  

COMException(0x800401E3):操作不可用(来自HRESULT的异常:0x800401E3(MK_E_UNAVAILABLE))

当程序尝试检索或创建Outlook实例时,会发生以下情况:

private Application GetApplicationObject()
    {

        Application application = null;

        if (Process.GetProcessesByName("OUTLOOK").Any())
        {
            application = Marshal.GetActiveObject("Outlook.Application") as Application;
        }
        else
        {
            application = new Application();
        }
        return application;
    }

我尝试了几种方法(批处理文件,.exe文件,程序中的参数),但它们都失败了。 它是使用用于手动启动任务的相同帐户启动的。

有人能帮助我吗?任何帮助,将不胜感激! 干杯!

2 个答案:

答案 0 :(得分:3)

Microsoft目前不建议也不支持从任何无人参与的非交互式客户端应用程序或组件(包括ASP,ASP.NET,DCOM和NT服务)自动化Microsoft Office应用程序,因为Office在此环境中运行Office时,可能会出现不稳定的行为和/或死锁。

如果要构建在服务器端上下文中运行的解决方案,则应尝试使用已为安全无人值守执行的组件。或者,您应该尝试找到允许至少部分代码在客户端运行的替代方法。如果从服务器端解决方案使用Office应用程序,则应用程序将缺少许多成功运行的必要功能。此外,您将承担整体解决方案稳定性的风险。请在Considerations for server-side Automation of Office文章中详细了解相关内容。

您可以考虑使用低级API(或任何其他第三方包装) - Outlook所基于的扩展MAPI。或者在Exchange配置文件的情况下使用EWS,有关详细信息,请参阅EWS Managed API, EWS, and web services in Exchange

答案 1 :(得分:0)

只是几个想法:

  1. 这可能是一个GUI问题。根据{{​​3}},GUI任务无法从计划任务运行。可能有一个解决方法,但我不知道一个。

  2. 这可能是上下文或权限问题。您在任务中配置了哪些设置,它们与在任务计划程序之外运行任务时的设置相同?