【发布时间】:2014-11-14 19:24:38
【问题描述】:
我正在编写一个控制台应用程序,它检查 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 保留, Object& ppunk) 在 System.Runtime.InteropServices.Marshal.GetActiveObject(字符串 progID) 在 ImportCruiseEmails.Program.Main()
上线:
Marshal.GetActiveObject("Outlook.Application") as Application;
Outlook 和控制台应用程序都在我的用户帐户下运行,该帐户具有管理员权限。整个下午我一直在用这个拉头发。任何人都可以阐明它吗?干杯!
【问题讨论】:
-
您确定您的程序和 Outlook 在同一个用户下运行吗?
-
好吧,Outlook 进程在我设置计划任务的同一用户下运行,但是根据 Dmitry 在下面的回答,这不一样。
标签: c# outlook console-application marshalling office-interop