我尝试从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/