在Server 2012 R2中自动化MS Word

时间:2014-03-11 10:57:02

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

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

我有一个作为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还是作为标准用户帐户运行,它都会失败
  • 如果我们在前台运行服务进程(即双击可执行文件)问题不会发生

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

8 个答案:

答案 0 :(得分:14)

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

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

创建文件夹:(根据您使用System32Syswow64位版本,将x86替换为x64

  

C:\ WINDOWS \ system32 \设置\ systemprofile \应用程序数据\本地\微软\的Windows \ INetCache   C:\的Windows \ system32 \设置\ systemprofile \桌面

最后也是最重要的一步!

Start - run - dcomcnfg.exe

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

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

答案 1 :(得分: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 |失败
  5. 我们的问题源于这样一个事实:我们正在与一个与LOCAL系统用户无关的用户(即登录到机器时拥有的用户类型)运行时,Windows将不允许这样做发生了。

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

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

答案 2 :(得分:1)

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

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

谢谢安迪:)

答案 3 :(得分:1)

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

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

C:\ WINDOWS \ system32 \设置\ systemprofile \应用程序数据\本地\微软\的Windows \ INetCac他 C:\ WINDOWS \ system32 \设置\ systemprofile \桌面 C:\ WINDOWS \ Syswow64资料\ CONFIG \ systemprofile \应用程序数据\本地\微软\的Windows \ INetCac他 C:\的Windows \ Syswow64资料\配置\ systemprofile \桌面

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

我没有使用过DCOM配置;我的应用程序使用具有管理权限的用户帐户;没有必要使用LocalSystem帐户"与桌面交互"选项。

谢谢。

答案 4 :(得分:0)

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

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

答案 5 :(得分:0)

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

答案 6 :(得分:0)

为此,我们已经有了一个可行的解决方案。但是,当我们尝试在完全更新的2012 RTM R2服务器上安装该解决方案时,该解决方案就失败了。在2016服务器上,我们没有看到此问题。

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

请遵循以下步骤!:

要在Windows 2012 Sever R2上解决此问题的措施,Windows 2012 Sever R2已由Windows更新完全更新:

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

展开:组件服务–计算机–我的计算机– DCOM配置

搜索:Microsoft Word 97 – 2003文档

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

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

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

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

答案 7 :(得分:0)

我一直在努力解决这个问题,并尝试了许多解决方案。我最终通过将标识更改为“此用户”解决了此问题。然后,我使用了我的应用程序池所使用的帐户,还不得不将该用户添加到“管理员”组。

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