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

COMException (0x800401E3): Operation unavailable (Exception from HRESULT: 0x800401E3 (MK_E_UNAVAILABLE)) with scheduled task

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

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

COMException (0x800401E3): Operation unavailable (Exception from 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 文件、程序参数),但都失败了。 它是使用与手动启动任务相同的帐户启动的。

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

一些想法:

  1. 这可能是 GUI 问题。根据 this answer,GUI 任务不能来自计划任务 运行。可能有解决方法,但我不知道有一个。

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

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

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

您可以考虑使用低级 API(或任何其他第三方包装器)- Outlook 所基于的扩展 MAPI。或 EWS(如果是 Exchange 配置文件),请参阅 EWS Managed API, EWS, and web services in Exchange 了解更多信息。