【问题标题】:Getting/Creating an Outlook Application in Windows 7在 Windows 7 中获取/创建 Outlook 应用程序
【发布时间】:2011-04-14 14:48:13
【问题描述】:

我正在尝试获取当前正在运行的 Outlook 版本或启动 Outlook,以防它未运行,但在 Windows 7 中获取或创建 Outlook 应用程序对象时遇到了一些问题. 我认为这与 Vista 和 7 中受限的用户权限有关。我正在使用 Outlook 2010。

编辑:只有在我已经启动了 Outlook 2010 实例时才会出现这些错误。如果 Outlook 没有启动,应用程序可以顺利运行(它可以自己启动一个 Outlook 实例)。

如果有人能告诉我如何正确获取 Outlook 应用程序版本,那将非常有帮助。

我正在运行的代码是一个很长的 try-catch 块,不断触发异常:


try
{
  // create an application instance of Outlook
  oApp = new Microsoft.Office.Interop.Outlook.Application();
}
catch(System.Exception ex)
{
  try
  {
     // get Outlook in another way
     oApp = Marshal.GetActiveObject("Outlook.Application") as Microsoft.Office.Interop.Outlook.Application;
  }
  catch (System.Exception ex2)
  {
     // try some other way to get the object
     oApp = Activator.CreateInstance(Type.GetTypeFromProgID("Outlook.Application")) as Microsoft.Office.Interop.Outlook.Application;
  }
}

应用程序向我抛出以下异常:

当我尝试创建新的 Outlook 应用程序实例时:

由于以下错误,检索具有 CLSID {0006F03A-0000-0000-C000-000000000046} 的组件的 COM 类工厂失败:80080005。

当我尝试获取 Outlook 应用实例时:

操作不可用(HRESULT 异常:0x800401E3 (MK_E_UNAVAILABLE))

当我尝试通过激活器创建实例时

由于以下错误,检索具有 CLSID {0006F03A-0000-0000-C000-000000000046} 的组件的 COM 类工厂失败:80080005。

谢谢!

【问题讨论】:

    标签: c# windows-7 outlook outlook-2010


    【解决方案1】:

    显然,这些错误是因为我在不同的用户权限级别(其中一个是管理员,另一个是普通用户)上运行 Outlook 和应用程序而触发的。

    【讨论】:

    • 安德烈我也有同样的问题。你是怎么解决的?在我的情况下,即使未手动打开 Outlook,它也会给出此错误“检索具有 CLSID {0006F03A-0000-0000-C000-000000000046} 的组件的 COM 类工厂失败,原因是以下错误:80080005。”
    • ANP,据我记得,触发此错误是因为我正在运行 Outlook 以及在不同用户权限下访问 Outlook 的应用程序。对我来说,这是因为我正在以管理员权限运行 Visual Studio,并试图检索以普通权限(而不是管理员)启动的 Outlook。要么是那个,要么是我无法访问一个挂起的 Outlook 进程,因为它是由应用程序的另一个实例启动的。
    • 哇!感谢分享这个。我有一个完全不同的问题,错误代码相同,这很可能是确切的问题!
    • 我遇到了同样的问题。 VS 设置为以管理员身份运行。当您直接从 VS 运行或调试应用程序时,它会继承管理员权限。如果 Outlook 以正常权限打开,则会出现 MK_E_UNVAILABLE 异常。在以下情况下,我已经能够成功运行类似的代码: 1. Outlook 以管理员权限运行 2. Outlook 已关闭并且应用程序创建了一个新应用程序。此外,您可能需要查看 MSDN 代码以获取现有的 Outlook 应用程序。它类似于上面的代码,但检查现有的 FIRST 而不是捕获异常:bit.ly/18YZarC
    【解决方案2】:
    1. 在开始菜单中选择运行
    2. 键入 dcomcnfg 并单击“确定”
    3. 组件服务窗口打开。
    4. 展开节点 Component Services -> MyComputer -> DCOM Config 。
    5. 右键单击应用程序(Outlook 邮件附件)并选择属性。
    6. 如有必要,单击“身份”选项卡。
    7. 点击“交互式用户”,然后确定

    【讨论】:

    • 你能扩展这个答案吗? “交互式用户”是做什么的?
    【解决方案3】:

    确实,如果您从 Visual Studio 运行独立应用程序或从使用 Office 产品的 Visual Studio 调试,您应该对两者(Visual Studio 和 Office 产品)具有相同的访问级别,这就是原因之一为什么会出现此问题,但我在网上看到很多人在服务中初始化 Outlook 对象时遇到此问题。我希望为我解决问题的方法也能帮助其他人。请按照步骤操作。

    1. 转到命令提示符,键入以下内容并按 Enter。这将打开组件服务:

      mmc comexp.msc /32

    1. 展开节点组件服务 -> MyComputer -> DCOM Config

    2. 现在找到您想要的应用程序(在本例中为 Outlook 邮件附件)并右键单击该应用程序(如果您按照这些步骤操作,则可以解决与所有办公应用程序相关的问题)并选择属性。

    3. 转到身份选项卡并选择交互式用户,然后按确定。这应该可以解决您的问题。

    交互式用户只不过是登录用户。当您尝试通过服务访问办公产品时,访问级别必须相同,这就是您需要指定正确用户的原因。如果您想在不登录服务器的情况下在服务器上运行该服务,您需要确保该服务器有一个用户帐户,该用户帐户将用于运行该服务以及运行“作为该用户的属性”中指定的办公产品(请查看属性对话框)。如果您想了解此对话框中提到的不同类型的用户帐户,请参考以下 Microsoft 链接。

    http://msdn.microsoft.com/en-us/library/windows/desktop/ms692541%28v=vs.85%29.aspx

    【讨论】:

      【解决方案4】:

      您的 Office 安装似乎已损坏。

      尝试通过以管理员身份重新运行安装程序来修复安装。

      【讨论】:

      • 如果没有模式对话框阻止应用程序,手动启动 Outlook 是否有效?确保您使用与您的应用程序使用的用户帐户相同的用户帐户进行测试。
      • Outlook 可以手动启动。这些错误显然仅在以前手动启动 Outlook 时才会出现。
      【解决方案5】:

      在我的情况下,Visual Studio 以管理员身份运行导致了问题。当我以普通用户身份运行它时,我终于摆脱了这个错误。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-30
        • 1970-01-01
        • 1970-01-01
        • 2015-05-29
        相关资源
        最近更新 更多