我有一个情况,我有一个使用OUTLOOK发送邮件的应用程序,问题是当我试图从以管理员打开的应用程序发送邮件时它抛出异常
使用CLSID检索组件的COM类工厂 {0006F03A-0000-0000-C000-000000000046}由于以下原因而失败 错误:80080005服务器执行失败(来自HRESULT的异常: 0x80080005(CO_E_SERVER_EXEC_FAILURE))。
有没有办法以编程方式解决它?
答案 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>