繁体   English   中英

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

[英]How to close outlook application opened by another user

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

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

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

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

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

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

获取用户名,请在此处查看此答案。

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

也许在这个方面有点晚了,但这里有两种可能的方法。

正如Lloyd所强调的那样,您可以尝试通过调用连接到“当前”用户(如果存在)的现有Outlook进程

Process.GetProcessByName("OUTLOOK"); 

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

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

您可能需要针对命名空间调用Logon / Logoff例程并以此方式进行操作,记住在使用后正确处理任何新实例,甚至获取新应用程序实例的进程ID并在其上调用.Kill。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM