首先,请不要回复一般的建议不要在服务器上自动化Word或链接到微软网页"如何在服务器上自动化Word如果你真的需要"。我知道这一点。
我有一个作为Windows服务运行的进程,使用。net OLE互操作来自动化Office(主要是打开和保存)。这段代码已经在数百台服务器上可靠地工作了8年,这些服务器使用了Windows和Office版本的许多组合,包括32位和64位,所以我很高兴这种机制是可靠的。到目前为止…
在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年的互操作程序集(显然后来的office版本支持程序集绑定重定向)
- 我们已经在office 2013中尝试了32位和64位,结果相同,但没有尝试更早版本的office
- 无论服务是作为LocalSystem运行还是作为标准用户帐户运行
- 如果我们在前台运行服务进程(即双击可执行文件),问题不会发生
显然,我仍然有事情要调查,但有兴趣听到是否有人看到这个特定的问题,即使你还没有解决它。请注意,办公自动化有很多困难和问题,所以除非你的症状和我的非常相似,否则你可能没有同样的问题。
同样的问题,但现在已经完全解决了。
我有一个Word 2013与Windows 2012 R2服务器结合在一个服务进程中运行,它可以做我想做的一切,而不需要启动交互式会话。我用它将文档转换为PDF文件。在Windows服务中,我托管了一个WCF服务。
创建文件夹:(根据x86
或x64
位版本将System32
替换为Syswow64
)
C: Windows System32系统 config systemprofile微软 AppData 当地 Windows INetCac桌面C:WindowsSystem32config systemprofile
最后也是最重要的一步!
Start - run - dcomcnfg.exe
打开属性->组件服务- DCOM配置- Microsoft Word 97 - 2003文档(注意这里没有提到版本,但没关系Office 2013将使用此作为DCOM配置)
打开标签页标识。将运行配置为本地管理员帐户。我做了一些测试,即使没有为用户启动交互会话,Word 2013也能正常工作。
我们(我的公司)目前正面临着同样的问题,这几乎是你的问题的翻版。我们已经在这方面完成了广泛的测试,我现在正在与微软支持工程师讨论,试图找到一个解决方案。
不幸的是,这是他们不希望我们做的事情,我认为他们已经加强了Windows Server 2012的安全性,以阻止人们这样做。
我们所做的尝试应该对你有所帮助:
- Server 2012 | Word 2007 | Failed
- Server 2012 | Word 2010 | Failed
- Server 2012 | Word 2013 | Failed
- Client 8.1 | Word 2013 | Failed
我们的问题源于我们正在与一个与LOCAL系统用户没有关联的用户运行word。当你登录到机器时,你拥有的用户类型)Windows将不再允许这种情况发生。
我和微软工程师正在"愚弄"windows,让它认为Word是作为本地服务运行的,然而微软工程师说这是一个很长的机会,到目前为止,我们所尝试的一切都以失败告终。看起来不太好。
对不起,我不能给你一个答案,但我想知道你并不孤单是件好事。我有同样的问题与moffice 2010(32位)和Windows Server 2012R2(64位)。Word, Excel, Powerpoint不支持localAdmin。
我像安迪一样创建了文件夹C:WindowsSystem32configsystemprofileAppDataLocalMicrosoftWindowsINetCac和,现在工作完美!
谢谢Andy:)
我的服务使用MS Word进行数据合并和连接功能。我在Windows Server 2012 R2上使用Word 2016。我的日志显示Word打开了,但是当文档打开时抛出了一个错误。
我首先创建了所有建议的4个文件夹:
C: Windows System32系统 config systemprofile微软 AppData 当地 Windows INetCacC:WindowsSystem32config systemprofile 桌面当地C:WindowsSysWOW64config systemprofile AppData 微软 Windows INetCac桌面C:WindowsSysWOW64config systemprofile
只有在创建最后一个目录后,问题才得到解决。
我没有使用DCOM配置;我的应用程序使用具有管理权限的用户帐户;没有必要使用带有"与桌面交互"选项的LocalSystem帐户。
谢谢。
我们在相当长的一段时间内有一个可行的解决方案。然而,当我们试图将其安装在完全更新的2012 RTM R2服务器上时,解决方案崩溃了。在2016年的服务器上,我们没有看到这个问题。
为了使它在Windows 2012 R2服务器上再次工作,也在无交互桌面环境中:
遵循这些步骤!:
Windows update:
解决Windows 2012 Sever R2完全更新问题的操作开始-运行- mmc comexp。MSC/32
展开:组件服务-计算机-我的计算机- DCOM配置
搜索:Microsoft Word 97 - 2003文档
RMC -属性-转到选项卡:身份从"启动用户"设置为"此用户"。使用曾经登录到服务器机器并在交互式桌面中至少打开过一次Word的"本地管理员帐户"。
最后一步:重启服务器!并使用新的文档名称再次测试您的解决方案。
就像在其他答案中已知和说的那样,这些文件夹需要创建并由主叫用户(本地系统)正常访问,或者由您在前面步骤中配置的用户访问。
C: Windows System32系统 config systemprofile微软 AppData 当地 Windows INetCac他C:WindowsSystem32config systemprofile 桌面C:WindowsSysWow64configsystemprofileAppDataLocalMicrosoftWindowsINetCac the C:WindowsSysWow64configsystemprofileDesktop
感谢OP和贡献者的所有帮助。在创建INetCache文件夹后,它为我工作。我已经做了以下工作,使一切工作没有活动会话(WS2012 R2/MS Office 2013 64x):
- 创建一个本地管理员用户并登录以设置任何打印机(打印到文件)以及默认的单词选项。
- 将DCOM配置标识指向创建的本地admin用户。
- 创建以下文件:C:WindowsSysWOW64configsystemprofileAppDataLocalMicrosoftWindowsINetCac·he
对于某些机器,您需要运行" mmc comexp "。设置MS Word的DCOM设置。我发现,当只安装了32位版本的Word时,我们需要这样做。
我一直在疯狂地排序,并尝试了许多解决方案。我最终通过将身份更改为"此用户"来解决这个问题。然后我使用我的应用程序池运行的帐户,还必须将该用户添加到"Administrators"组。
唷……