Rav*_*nth 4 .net c# outlook windows-services ms-office
我试图从 Windows 服务挂钩到 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);
}
}
Run Code Online (Sandbox Code Playgroud)
但是当我通过 Windows 窗体应用程序启动它时,相同的代码工作正常。我浏览了一些网站,他们说 Outlook 对象不在 ROT 表中。什么是解决方案。
即使您的服务作为交互式用户运行,Outlook 或任何其他 Office 应用程序也无法在 Windows 服务中运行。只能在服务中使用扩展 MAPI(仅限 C++ 或 Delphi)或扩展 MAPI 包装器,如Redemption(其RDO系列对象)。
在您的特定情况下,您似乎正在尝试捕获该Application.ItemSend事件。绝对没有理由为此创建 Windows 服务。创建一个 COM 插件 - 它将由 Outlook 加载并运行,只要 Outlook 本身在同一安全上下文中的同一进程中运行。
| 归档时间: |
|
| 查看次数: |
4609 次 |
| 最近记录: |