我尝试从Windows Service挂接到Outlook应用程序,但是出现异常操作不可用(HRESULT异常:0x800401E3(MK_E_UNAVAILABLE))是我的代码。

   public void ItemSendEvent()
    {
        try
        {
           if (Process.GetProcessesByName(ApplicationConstants.OUTLOOK_PROCESS_NAME).Count() > 0)
                {
                    // If so, use the GetActiveObject method to obtain the process and cast it to an Application object.
                    outlookApplication = Marshal.GetActiveObject(ApplicationConstants.OUTLOOK_APPLICATION_NAME) as Microsoft.Office.Interop.Outlook.Application;
                    Microsoft.Office.Interop.Outlook.NameSpace nameSpace = outlookApplication.GetNamespace(ApplicationConstants.OUTLOOK_NAME_SPACE);
                    nameSpace.Logon("", "", Missing.Value, Missing.Value);
                    nameSpace = null;
                    outlookApplication.ItemSend += outlookApplication_ItemSend;
                }
                log.Info("Outlook Item Send event registered successfully.");
        }
        catch (System.Exception ex)
        {
            log.Error("Exception occurred while registering Outlook Item Send event. " + ex.Message);
        }
    }


但是当我通过Windows窗体应用程序启动它时,使用的是相同的代码。我浏览了一些网站,他们说Outlook对象不在ROT表中。解决办法是什么。

最佳答案

即使您的服务以交互用户身份运行,Outlook或任何其他Office应用程序也无法在Windows服务中运行。服务中只能使用扩展MAPI(仅C ++或Delphi)或扩展MAPI包装器(如Redemption(其RDO系列对象))。

在您的特定情况下,您似乎正在尝试捕获Application.ItemSend事件。绝对没有理由为此创建Windows服务。创建一个COM加载项-只要Outlook本身在同一安全上下文中的同一进程中运行,它将由Outlook加载并运行。

关于c# - 通过Windows服务运行时,操作不可用(来自HRESULT的异常:0x800401E3(MK_E_UNAVAILABLE))?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37589935/

10-16 15:35
查看更多