在Server 2012 R2中自动化MS Word

And*_*ndy 9 automation ms-word ms-office office-interop

首先,请不要回复通用建议,不要在服务器上自动化Word或在MS网页上链接"如果你真的必须如何在服务器上自动化word".我知道这一点.

我有一个作为Windows服务运行的进程,并使用.Net OLE interop自动化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...
Run Code Online (Sandbox Code Playgroud)

我到目前为止的观察结果可能相关或不相关:

  • 所有文件都失败了
  • 在Windows 8.1中正常工作
  • 在客户现场和我们的测试环境中都发生了同样的问题,因此不太可能是纯粹的环境问题
  • 我的应用程序使用.Net 3.5
  • 代码链接到2003 Interop程序集(显然后来的Office程序版本由程序集绑定重定向支持)
  • 我们已经尝试使用Office 2013 32和64位同样的结果,但没有尝试早期版本的办公室
  • 无论服务是以LocalSystem还是作为标准用户帐户运行,它都会失败
  • 如果我们在前台运行服务进程(即字面上双击可执行文件),问题就不会发生

显然我仍然有事情需要调查,但有兴趣听到其他人是否已经看到这个特定的问题,即使你还没有解决它.请注意办公自动化有很多困难和问题,所以除非你的症状与我的非常相似,否则你可能没有同样的问题.

Céd*_*nne 14

这里的问题相同,但现在已经完全解决了.

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

创建文件夹:(替换System32Syswow64取决于您使用x86x64位版本)

C:\ Windows\System32\config\systemprofile\AppData\Local\Microsoft\Windows\INetCache C:\ Windows\System32\config\systemprofile\Desktop

最后也是最重要的一步!

Start - run - dcomcnfg.exe
Run Code Online (Sandbox Code Playgroud)

打开属性 - >组件服务 - DCOM配置 - Microsoft Word 97 - 2003文档(请注意,此处未提及该版本,但无关紧要Office 2013将使用此作为DCOM配置)

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


New*_*ter 4

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

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

我们所做的尝试应该对您有帮助:

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

我们的问题源于这样一个事实:我们正在使用与本地系统用户(即登录计算机时拥有的用户类型)无关的用户运行 word,Windows 将不允许这种情况再发生。

我自己和 MS 工程师正在研究“愚弄”Windows,使其认为它正在将 Word 作为本地服务运行,但是 MS 工程师表示,这充其量是一个渺茫的机会,到目前为止,我们所尝试的一切都以失败告终。看起来不太好。

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

  • MS 仍然建议不要使用 64 位,但过去是因为它没有任何好处,现在主要是因为它与附加组件不兼容。我们在测试环境中使用 64 位 Office 2013 一段时间,没有出现任何问题。我们不必搞乱用户权限,但我们使用 LocalSystem 帐户来调用 Office。话虽如此,我们目前正在开发一种架构,该架构将使用 Windows 自动登录在服务器启动时创建桌面会话并自动运行我们的进程,以便它在桌面上运行。这似乎是唯一可靠的长期解决方案。 (2认同)