【问题标题】:Creating an Outlook application/mail item without administrator right using a C# application that has administrator privilage使用具有管理员权限的 C# 应用程序创建没有管理员权限的 Outlook 应用程序/邮件项目
【发布时间】:2015-05-09 10:08:54
【问题描述】:

我编写了一个需要管理员权限的 C# 代码。使用此应用程序,我正在尝试创建一个 Outlook 应用程序/邮件项目以打开 Outlook 撰写窗口。但是,Outlook 2013 已经在没有管理员权限的情况下运行。我正在使用以下代码,但由于创建的应用程序/邮件项和已运行的 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);

是否可以将应用程序/邮件项创建为当前用户而不是管理员(类似于通过提供当前用户的用户名和密码以当前用户身份运行进程)?

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

【问题讨论】:

    标签: c# exception outlook administrator


    【解决方案1】:

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

    【讨论】:

    • 是的。即使模拟(LogonUser + Impersonate)也不起作用
    【解决方案2】:

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

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

    【讨论】:

    • 正如我在问题中提到的,Outlooks 需要在没有管理员权限的情况下运行才能使其索引服务正常工作。不过,了解解决此问题的方法会非常有趣!
    【解决方案3】:

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

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

    这似乎工作得很好。

    【讨论】:

      猜你喜欢
      • 2015-05-07
      • 1970-01-01
      • 2013-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-05
      • 1970-01-01
      • 2021-05-23
      相关资源
      最近更新 更多