在Server 2012 R2中自动化MS Word

问题描述 投票:9回答:8

首先,请不要回复通用建议,不要在服务器上自动化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...

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

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

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

automation ms-word ms-office office-interop
8个回答
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

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

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


4
投票

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

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

我们尝试过哪些应该对您有所帮助:

  1. Server 2012 | Word 2007 |失败
  2. Server 2012 | Word 2010 |失败
  3. Server 2012 | Word 2013 |失败
  4. 客户端8.1 | Word 2013 |失败

我们的问题源于这样一个事实:我们正在与一个与LOCAL系统用户无关的用户(即你登录机器时拥有的用户类型)运行单词.Windows将不再允许这种情况发生。

我自己和MS工程师正在研究“愚弄”窗口,认为它正在运行Word作为本地服务,但MS工程师表示这是一个很好的长镜头,到目前为止我们所尝试的一切都导致了失败。看起来不太好看。

对不起,我没有给你一个答案,但我想它很清楚你并不孤单?


1
投票

我遇到了与MsOffice 2010(32位)和Windows Server 2012R2(64位)相同的问题。 Word,Excel,Powerpoint不能与localAdmin一起使用。

我创建了文件夹C:\ Windows \ System32 \ config \ systemprofile \ AppData \ Local \ Microsoft \ Windows \ INetCac他喜欢Andy做的,现在它完美无缺!

谢谢安迪:)


1
投票

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

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

C:\ Windows \ System32 \ config \ systemprofile \ AppData \ Local \ Microsoft \ Windows \ INetCac他C:\ Windows \ System32 \ config \ systemprofile \ Desktop C:\ Windows \ SysWOW64 \ config \ systemprofile \ AppData \ Local \ Microsoft \ Windows \ INetCac他C:\ Windows \ SysWOW64 \ config \ systemprofile \ Desktop

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

我没有使用过DCOM配置;我的应用程序使用具有管理员权限的用户帐户没有必要使用本地系统帐户与“与桌面交互”选项。

谢谢。


0
投票

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

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

0
投票

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


0
投票

我们有一段时间的工作解决方案。但是,当我们尝试将其安装在完全更新的2012 RTM R2服务器上时,解决方案就破裂了。在2016服务器上,我们没有看到此问题。

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

跟着这些步骤!:

解决Windows 2012 Server R2上由Windows更新完全更新的问题的操作:

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

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

搜索:Microsoft Word 97 - 2003文档

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

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

就像已知并在其他答案中说的那样,这些文件夹需要由主叫用户(本地系统)或您在prev步骤中配置的用户创建和访问。

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


0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.