【问题标题】:Powerpoint Interop fails in a Windows Service but works fine in a Windows Form applicationPowerpoint Interop 在 Windows 服务中失败,但在 Windows 窗体应用程序中工作正常
【发布时间】:2009-04-08 11:40:53
【问题描述】:

我编写了一个应用程序来监视文件夹,每当将 PowerPoint 文档放入其中时,它都会遍历其中的幻灯片并生成每张幻灯片的 png 图像。这在 Windows 窗体应用程序中运行良好,但我在 Windows 服务中放置了完全相同的代码,使用了相同的测试文件,但无法打开它并出现以下错误:

错误:PowerPoint 无法打开文件。 在 Microsoft.Office.Interop.PowerPoint.Presentations.Open(String FileName, MsoTriState ReadOnly, MsoTriState Untitled, MsoTriState WithWindow) -2147467259 Com 错误

我已将服务设置为使用我自己的用户帐户(具有管理员权限)运行,因此我认为这可以排除权限问题,但我想不出其他可以尝试的方法。

有什么建议吗?

【问题讨论】:

    标签: windows-services interop powerpoint


    【解决方案1】:

    一个名叫“Gary McGill”的人发布了一个对我来说效果很好的解决方案(关于一个非常相似的问题):

    Automating Office via Windows Service on Server 2008

    像魅力一样工作(我什至不必选中“登录”选项卡上的“允许服务与桌面交互”复选框)

    【讨论】:

      【解决方案2】:

      如果没有更多信息,就无法判断问题所在。它可以是任何数量的东西。如果操作系统是 XP 或更早版本,则在服务运行时不会加载用户的配置文件,因此 PP 可能无法访问它需要的某些信息。 PP 可能正在尝试一些复杂的操作,假设它处于交互式会话中。由于缺少用户配置文件,PP 使用的 COM 组件可能无法初始化。真正的错误甚至可能不是安全问题,开发人员使用 ERROR_ACCESS_DENIED 或 ERROR_OUT_OF_MEMORY 来捕获所有意外错误的情况并不少见。

      但真正的问题是 PowerPoint 在很大程度上是一个用户级应用程序 - 它不应该在服务中使用。将服务设置为与桌面交互是一个糟糕的解决方案。即使它确实有效,它也只会掩盖更深层次的问题,并使其作为服务运行变得毫无意义。有许多实用程序和组件可用于将 PowerPoint 幻灯片转换为图像文件。在 Google 上进行快速搜索会返回许多看起来更适合在服务中使用的可能性,而且其中大多数都非常便宜。

      【讨论】:

      • 我评估了一些组件,但它们遭受 pptx 不兼容和/或偶尔无法处理奇怪文件的问题。 Interop 成功地通过了我测试过的 3-400 个文件中的 100%。
      • 我认为你是对的,微软自己不推荐这种方法(support.microsoft.com/default.aspx?scid=kb;en-us;257757),我认为稳定性比不能处理偶尔的文件更可取。将改用 Aspose.Slides,将来会支持 pptx。
      【解决方案3】:
      • 进入组件服务>计算机>我的电脑>DCOM 配置。
      • 转到“Microsoft PowerPoint 幻灯片”DCOM 并选择属性。
      • 转到身份选项卡并将用户从被继承更改为具有网络服务/访问权限的特定用户。

      PowerPoint 互操作不应尝试打开 UI,但这也可能是问题所在。

      【讨论】:

        【解决方案4】:

        尝试将服务设置为与桌面交互。

        【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-25
        • 1970-01-01
        • 1970-01-01
        • 2018-02-01
        相关资源
        最近更新 更多