我正在编写一个控制台应用程序,用于检查Outlook邮箱的内容,以便将特定电子邮件的内容读入数据库。
无论Outlook是否开放,此应用程序在Visual Studio中都能正常运行。
如果我构建应用程序并从exe运行它,它只在Outlook打开时才有效,这不是一个真正的问题。
但是,我需要从计划任务运行它,因为它必须每隔几分钟运行一次。这根本不起作用。
我使用以下代码:
System.Diagnostics.Process[] processes = System.Diagnostics.Process.GetProcessesByName("OUTLOOK");
int collCount = processes.Length;
if (collCount != 0)
{
OutlookApp = Marshal.GetActiveObject("Outlook.Application") as Application;
}
else
{
OutlookApp = new Application();
}
我收到的错误消息是:
System.Runtime.InteropServices.COMException(0x800401E3):操作 不可用(来自HRESULT的异常:0x800401E3(MK_E_UNAVAILABLE))
在System.Runtime.InteropServices.Marshal.GetActiveObject(Guid& rclsid,IntPtr reserved,Object& pp。) System.Runtime.InteropServices.Marshal.GetActiveObject(String progID) 在ImportCruiseEmails.Program.Main()
在线:
Marshal.GetActiveObject("Outlook.Application") as Application;
Outlook和控制台应用程序都在我的用户帐户下运行,该帐户具有管理员权限。我整个下午一直把头发拉出来。任何人都可以对此有所了解吗?干杯!
答案 0 :(得分:5)
即使用户帐户相同,安全上下文也不同,因为调度程序作为服务运行。并且不能在服务中使用Office应用程序。
您的选择
如果是Exchange Server,请使用EWS访问邮箱。
扩展MAPI(仅限C ++或Delphi)
Redemption(任何语言) - 它包装扩展MAPI,并且可以从服务中使用其RDO系列对象。