【问题标题】:Automating MS Word in Server 2012 R2在 Server 2012 R2 中自动化 MS Word
【发布时间】:2020-05-11 18:53:13
【问题描述】:

首先,请不要回复一般性建议,即不要在服务器上自动化 Word 或链接到 MS 网页上的“如果你真的必须在服务器上自动化 Word”。我知道这一点。

我有一个作为 Windows 服务运行的进程,并使用 .Net OLE 互操作来自动化 Office(主要是 Open 和 SaveAs)。这段代码已经在数百台使用 Windows 和 Office 版本(32 位和 64 位)的多种组合的服务器上可靠地运行了 8 年,因此我很高兴该机制是可靠的。到目前为止...

使用 Server 2012 R2,它适用于 PowerPoint 和 Excel,但尝试打开 word 文档失败:

System.Runtime.InteropServices.COMException (0x800A16A0): 
  The file appears to be corrupted.
   at Microsoft.Office.Interop.Word.Documents.Open...

到目前为止我的观察可能相关也可能不相关:

  • 所有文档均失败
  • 在 Windows 8.1 中运行良好
  • 在客户站点和我们的测试环境中都发生了同样的问题,因此不太可能是纯粹的环境问题
  • 我的应用程序使用的是 .Net 3.5
  • 代码链接到 2003 Interop 程序集(显然更高版本的 office 版本受程序集绑定重定向支持)
  • 我们已经在 32 位和 64 位的 office 2013 上进行了尝试,结果相同,但没有尝试过早期版本的 office
  • 无论服务是作为 LocalSystem 还是作为标准用户帐户运行,它都会失败
  • 如果我们在前台运行服务进程(即直接双击可执行文件),问题就不会发生

显然,我仍有一些事情需要调查,但我很想知道是否有其他人看到过这个特定问题,即使你还没有解决它。请注意,办公自动化存在许多困难和问题,因此除非您的症状与我的非常相似,否则您可能没有同样的问题。

【问题讨论】:

    标签: automation ms-word ms-office office-interop


    【解决方案1】:

    这里有同样的问题,但现在已经完全解决了。

    我有一个 Word 2013 与 Windows 2012 R2 Server 结合在一个服务进程中运行,它可以完成我想要的一切,而无需启动交互式会话。我用它来将文档转换为 PDF 文件。在 Windows 服务中,我托管了一个 WCF 服务。

    创建文件夹:(将System32 替换为Syswow64,具体取决于您使用x86x64 位版本)

    C:\Windows\System32\config\systemprofile\AppData\Local\Microsoft\Windows\INetCac‌he C:\Windows\System32\config\systemprofile\Desktop

    最后也是最重要的一步!

    Start - run - dcomcnfg.exe
    

    打开属性 -> 组件服务 - DCOM 配置 - Microsoft Word 97 - 2003 文档(注意这里没有提到版本但没关系 Office 2013 将使用它作为 DCOM 配置)

    打开标签标识。将运行配置为本地管理员帐户。我做了一些测试,即使没有为用户启动交互式会话,Word 2013 也能正常工作。

    【讨论】:

      【解决方案2】:

      我们(我的公司)目前面临同样的问题,这几乎是您问题的副本。我们已经围绕这个领域完成了广泛的测试,我现在正在与 MS 支持工程师进行谈判,试图找到解决办法。

      不幸的是,这是他们不希望我们做的事情,我认为他们已经加强了 Windows Server 2012 的安全性以阻止人们这样做。

      我们尝试过的应该对您有所帮助的方法:

      1. 服务器 2012 |字 2007 |失败
      2. 服务器 2012 |字 2010 |失败
      3. 服务器 2012 |词 2013 |失败
      4. 客户端 8.1 |词 2013 |失败

      我们的问题源于我们正在使用与本地系统用户(即您登录机器​​时的用户类型)无关的用户运行 word没有了。

      我自己和 MS 工程师正在努力“愚弄”窗口,使其认为它正在将 Word 作为本地服务运行,但 MS 工程师说这充其量只是一个远景,到目前为止,我们所做的一切都导致了失败。看起来不太好。

      抱歉,我没有给你答案,但我想知道你并不孤单是件好事吗?

      【讨论】:

      • 感谢这些 cmets。我们在使用 DCOM 配置方面取得了一些成功,但目前似乎没有一致的方法。此外,我们已经多次让它开箱即用。我的“最坏情况”解决方案是运行一个单独的 Windows 8 虚拟机,该虚拟机在启动时自动登录并在前台运行 Office,但这很麻烦,我宁愿不参与。
      • 嗨,安迪,我认为值得向您提供有关我们所处情况的最新信息。我们基本上已经放弃了让它工作的尝试,相反,我们正在努力开发一个纯 Java 解决方案,希望这样做可以完全消除对服务器托管解决方案的需求。
      • 我也一直在与微软交谈。我们根本无法让它在 32 位 office 上工作,但在 64 位 office 2013 上它似乎工作正常。但是,我们确实必须创建文件夹 C:\Windows\System32\config\systemprofile\AppData\Local\Microsoft\Windows\INetCache 以及正常的 C:\Windows\System32\config\systemprofile\Desktop。同意这将变得越来越困难
      • 嗨,安迪,感谢您的更新。我以为MS强烈建议不要使用64位版本的office?并且您是否必须弄乱任何用户权限?
      • MS 仍然建议不要使用 64 位,但以前是因为它不好,现在主要是因为它与附加组件不兼容。我们在测试环境中使用了 64 位 office 2013 一段时间,没有任何问题。我们不必乱用用户权限,但我们使用 LocalSystem 帐户来调用 Office。说了这么多,我们目前正在研究一种架构,该架构将使用 Windows 自动登录在服务器启动时创建桌面会话并自动运行我们的进程,以便它在桌面上运行。这似乎是唯一可靠的长期解决方案。
      【解决方案3】:

      我在使用 MsOffice 2010(32 位)和 Windows Server 2012R2(64 位)时遇到了同样的问题。 Word、Excel、Powerpoint 不适用于 localAdmin。

      我像 Andy 一样创建了文件夹 C:\Windows\System32\config\systemprofile\AppData\Local\Microsoft\Windows\INetCac‌​he,现在它可以完美运行了!

      谢谢安迪 :)

      【讨论】:

        【解决方案4】:

        我的服务使用 MS Word 进行数据合并和连接功能。 我在 Windows Server 2012 R2 上使用 Word 2016。 我的日志显示 Word 已打开,但在打开文档时出现错误。

        我首先创建了所有建议的 4 个文件夹:

        C:\Windows\System32\config\systemprofile\AppData\Local\Microsoft\Windows\INetCac‌​he C:\Windows\System32\config\systemprofile\Desktop C:\Windows\SysWOW64\config\systemprofile\AppData\Local\Microsoft\Windows\INetCac‌​he C:\Windows\SysWOW64\config\systemprofile\Desktop

        只有在创建最后一个目录后问题才解决。

        我没有使用过 DCOM 配置;我的应用程序使用具有管理权限的用户帐户;无需使用带有“与桌面交互”选项的 LocalSystem 帐户。

        谢谢。

        【讨论】:

        • 重新措辞以便更好地理解。如果我没有明白你的意思,请随时再次编辑。
        【解决方案5】:

        很长一段时间以来,我们都有一个可行的解决方案。但是,当我们尝试将其安装在完全更新的 2012 RTM R2 服务器上时,该解决方案就崩溃了。在 2016 服务器上,我们看不到这个问题。

        为了让它在 Windows 2012 R2 Server 和非交互式桌面环境中再次运行:

        按照这些步骤操作!:

        在 Windows 更新完全更新的 Windows 2012 Sever R2 上解决问题的措施:

        开始-运行-mmc comexp.msc /32

        展开:组件服务-计算机-我的电脑-DCOM配置

        搜索:Microsoft Word 97 – 2003 文档

        RMC – 属性 – 转到选项卡:身份 从“启动用户”设置为“此用户”。 使用“本地管理员帐户”,该帐户曾经登录到服务器计算机并在交互式桌面中至少打开过一次 Word。

        最后一步:重启服务器!并使用新的文档名称再次测试您的解决方案。

        就像其他答案中所说的那样,这些文件夹需要由调用用户(本地系统)或您在上一步中配置的用户正常创建和访问。

        C:\Windows\System32\config\systemprofile\AppData\Local\Microsoft\Windows\INetCac‌he C:\Windows\System32\config\systemprofile\Desktop C:\Windows\SysWow64\config\systemprofile\AppData\Local\Microsoft\Windows\INetCac‌he C:\Windows\SysWow64\config\systemprofile\Desktop

        【讨论】:

        • 我们不再使用 DCOM Config - 我们只是将服务配置为作为普通用户帐户运行(以交互方式登录该帐户并确保您可以启动并激活 office OK)跨度>
        • 谢谢!这个适用于我使用 Office 2010 64 位和 Windows Server 2012 R2 Standard。无需为我创建文件夹 C:\Windows\SysWow64\config\systemprofile\AppData\Local\Microsoft\Windows\INetCac‌he,在我的情况下只需要文件夹 C:\Windows\SysWow64\config\systemprofile\Desktop。如您所说,必须使用本地管理员帐户。如果使用非管理员帐户,则不起作用。
        【解决方案6】:

        感谢所有帮助 OP 和贡献者。创建 INetCache 文件夹后,它对我有用。我已经完成了以下操作以使所有内容在没有活动会话的情况下正常工作(WS2012 R2 / MS Office 2013 64x):

        1. 创建本地管理员用户并登录以设置任何打印机(打印到文件)以及默认字选项。
        2. 将 DCOM 配置标识指向创建的本地管理员用户。
        3. 创建以下文件:C:\Windows\SysWOW64\config\systemprofile\AppData\Local\Microsoft\Windows\INetCac‌​he

        【讨论】:

          【解决方案7】:

          对于某些机器,您需要运行“mmc comexp.msc /32”来设置 MS Word 的 DCOM 设置。我发现只安装 32 位版本的 Word 时我们需要这样做。

          【讨论】:

            【解决方案8】:

            我一直在发疯地对此进行排序,并尝试了许多解决方案。我最终通过将身份更改为“此用户”来解决此问题。然后,我使用了运行我的应用程序池的帐户,并且还必须将此用户添加到“管理员”组..

            呼...希望这也对某人有所帮助。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2018-10-30
              • 1970-01-01
              • 1970-01-01
              • 2019-01-14
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多