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

C# 通过C以与我的程序相同的权限打开MS Outlook#,c#,com,outlook,privileges,C#,Com,Outlook,Privileges,我正在编写一个程序,需要打开Microsoft Outlook并在用户单击按钮时为其创建邮件项目。但是,当我这样做时,我会得到以下错误: 正在检索具有CLSID的组件的COM类工厂 {0006F03A-0000-0000-C000-0000000000 46}由于以下原因失败 错误:80080005服务器执行失败(HRESULT异常: 0x80080005(CO_E_服务器执行失败)) 在研究此错误后,我发现我的程序和MS Outlook必须以管理员身份运行或以正常权限级别运行 这是我的问题。。

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

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

在研究此错误后,我发现我的程序和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应用程序所做的操作。

Outlook是一个单例,因此如果它已经运行,您将获得一个指向已运行实例的指针


你的代码是做什么的?您可能需要考虑在PRO中加载的库,因此不存在此问题。CDO 1.21(Outlook默认情况下不再安装)或将正常工作。

我可能会查看此赎回库。。。所有的代码需要做的是创建一个邮件项目,附加多个pdf文档,添加一些HTML文本,然后显示它。用户将完成其余的工作。如果程序和Outlook都在同一特权级别下运行,则此功能有效。但如果两者都不是,它就不起作用,并在我原来的帖子中抛出错误。大多数用户将已打开Outlook。如果您感兴趣,请编辑我的原始帖子,向您展示我如何使用代码。如果您需要显示邮件,Redemption将使用MAPI forms API。由于MAPI表单是由outlook.exe实现的,因此您将遇到相同的跨进程COM问题…Doh。我还没有机会看到救赎,但我相信你的话。不过,谢谢你的建议!