使用具有管理员权限的 C# 应用程序在没有管理员权限的情况下创建 Outlook application/mail 项目

Creating an Outlook application/mail item without administrator right using a C# application that has administrator privilage

我写了一个需要管理员权限的C#代码。使用此应用程序,我正在尝试创建一个 Outlook application/mail 项目以打开 outlook compose window。但是,Outlook 2013 已经 运行 没有管理员权限。我正在使用以下代码,但由于创建的 application/mail 项目和已经 运行 的 outlook 实例具有不同的权限,因此会引发异常。

Microsoft.Office.Interop.Outlook.Application app = new Microsoft.Office.Interop.Outlook.Application();
Microsoft.Office.Interop.Outlook.MailItem mailItem = app.CreateItem(Microsoft.Office.Interop.Outlook.OlItemType.olMailItem);

是否可以将 application/mail 项目创建为当前用户而不是管理员(类似于 运行 通过提供当前用户的用户名和密码作为当前用户的进程用户)?

Outlook 需要 运行 没有管理员权限才能拥有功能性索引服务。

异常详情如下:

System.Runtime.InteropServices.COMException was unhandled
HResult=-2146959355
Message=Retrieving the COM class factory for component with CLSID {0006F03A-0000-0000-C000-000000000046} failed due to the following error: 80080005 Server execution failed (Exception from HRESULT: 0x80080005 (CO_E_SERVER_EXEC_FAILURE)).
Source=mscorlib
ErrorCode=-2146959355

不,如果安全上下文不同,COM 封送处理将明确拒绝工作。这是一项安全功能,旨在避免在未经用户明确同意的情况下提升安全权限的情况。

如果您需要从您的应用程序访问 运行ning 实例,您需要 运行 具有管理员权限的 Outlook。安全上下文应与您的应用程序相对应。

无论如何,您可以考虑改用 Exchange Web 服务。有关详细信息,请参阅 EWS Managed API, EWS, and web services in Exchange。您也可以考虑使用 .net BCL 创建和发送电子邮件。

我想到的一个解决方案是通过提供当前用户的用户名和密码以当前用户身份执行辅助 C# 应用程序。然后此应用程序负责创建 Outlook mail/application 项目并打开撰写邮件。这样,已经 运行 的 Outlook 和创建的 mail/application 项目都没有管理员权限。

我进一步简化了这一点,甚至通过简单地重新执行我的原始 C# 应用程序但没有管理员权限并将输入参数传递给它来创建 Outlook mail/application 项来避免使用任何辅助 C# 应用程序。

这似乎工作得很好。