如何关闭其他用户打开的Outlook应用程序

时间:2014-02-21 12:20:46

标签: c#

我有一个情况,我有一个使用OUTLOOK发送邮件的应用程序,问题是当我试图从以管理员打开的应用程序发送邮件时它抛出异常

  

使用CLSID检索组件的COM类工厂   {0006F03A-0000-0000-C000-000000000046}由于以下原因而失败   错误:80080005服务器执行失败(来自HRESULT的异常:   0x80080005(CO_E_SERVER_EXEC_FAILURE))。

有没有办法以编程方式解决它?

2 个答案:

答案 0 :(得分:2)

您可以调用Process.GetProcessesByName()传递OUTLOOK或实际进程名称。

这会为您提供一系列流程。然后,您可以遍历其中的每一个并检查启动该过程的用户。如果用户不是您想要的用户,您可以致电Process.Kill()并终止该过程。

获取用户可能很棘手,您可以使用WMI(您也可以使用WMI列出进程)。

检查此答案here以获取用户名。

但是我会重新考虑你如何发送邮件。作为用户,我最不希望看到我的Outlook消失,因为您的应用程序正在尝试发送电子邮件。

答案 1 :(得分:1)

在这方面可能要晚一些,但是这里有两种可能的方法。

如劳埃德(Lloyd)所强调的那样,您可以通过调用

尝试为“当前”用户连接到现有Outlook进程(如果存在)。
Process.GetProcessByName("OUTLOOK"); 

这将获得一系列Outlook进程,您可以迭代这些进程,直到找到所需的实例。

或者,(或者,如果未找到任何进程),您可以初始化Outlook应用程序的新实例,连接到默认的MAPI命名空间,然后以这种方式发送电子邮件。大概您正在使用Microsoft.Office.Interop.Outlook库中定义的对象?

您可能需要针对名称空间调用登录/注销例程,然后继续进行操作,记住在使用后正确处置任何新实例,甚至要获取新应用程序实例的进程ID并在其上调用.Kill。 / p>