通过C#打开与我的程序具有相同权限的MS Outlook

时间:2013-09-30 12:38:26

标签: c# com outlook privileges

我正在编写一个程序,需要打开Microsoft Outlook并在用户点击按钮时为其创建邮件项目。但是,当我这样做时,我收到以下错误:

  

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

在研究此错误后,我发现我的程序和MS Outlook必须既可以作为管理员运行,也可以作为普通权限级别运行

所以这就是我的问题......如何使用与当前正在运行的程序相同的权限级别通过C#代码打开MS Outlook。我需要获取当前权限级别,然后使用该权限级别打开Outlook。到目前为止,我对此研究没有运气。任何帮助表示赞赏!

这是我打开MS Outlook以及如何使用它的代码(当前):

// this will grab the current instance of outlook if it's running or make a new one
// however, it still doesn't have a way to open outlook with specific privileges...
//Application outlookApp = (Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Outlook.Application");
Application outlookApp = new Application();

MailItem mailItem = outlookApp.CreateItem(OlItemType.olMailItem);
mailItem.Subject = "Blah";
mailItem.HTMLBody= @"Various HTML stuff";

foreach (string documentPath in this.documentPaths)
{
    mailItem.Attachments.Add(documentPath, 1, 1, documentPath);
}

mailItem.Display(true);

编辑:更改了我的代码,以显示我在使用Outlook应用时所做的事情。

1 个答案:

答案 0 :(得分:0)

Outlook是一个单例,所以如果它已经在运行,你将获得一个指向已经运行的实例的指针。

您的代码有什么作用?您可能想要考虑一个加载进程内的库,因此没有这个问题。 CDO 1.21(默认情况下不再由Outlook安装)或Redemption都可以使用。