C# 如何关闭由其他用户打开的outlook应用程序

C# 如何关闭由其他用户打开的outlook应用程序,c#,C#,我有一种情况,我有一个使用OUTLOOK发送邮件的应用程序,问题是当我试图从作为管理员打开的应用程序发送邮件时,它抛出异常 正在检索具有CLSID的组件的COM类工厂 {0006F03A-0000-0000-C000-0000000000 46}由于以下原因失败 错误:80080005服务器执行失败(HRESULT异常: 0x80080005(CO_E_服务器执行失败)) 有什么方法可以通过编程来解决这个问题吗?您可以调用Process.getProcessByName()传入OUTLOOK或任

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

正在检索具有CLSID的组件的COM类工厂 {0006F03A-0000-0000-C000-0000000000 46}由于以下原因失败 错误:80080005服务器执行失败(HRESULT异常: 0x80080005(CO_E_服务器执行失败))


有什么方法可以通过编程来解决这个问题吗?

您可以调用
Process.getProcessByName()
传入
OUTLOOK
或任何实际的进程名称

这将获得一个进程数组。然后,您可以遍历其中的每一个,并检查启动流程的用户。如果用户不是您想要的用户,您可以调用
Process.Kill()
并终止该进程

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

检查此答案以获取用户名


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

这一次可能有点晚了,但这里有两种可能的方法

正如Lloyd所强调的,您可以通过调用

Process.GetProcessByName("OUTLOOK"); 
这将获得一组Outlook进程,您可以迭代这些进程,直到找到您要查找的实例

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


您可能需要针对命名空间调用登录/注销例程,并以这种方式继续,记住在使用后正确处理任何新实例,甚至获取新应用实例的进程ID并调用.Kill。

正是我要说的。我的最终目标是通过outlook发送邮件,但是windows不允许访问outlook,因为它是由另一个用户打开的。有什么解决方案吗。