使用Microsoft.Office.Interop.Word突然触发Word异常如何排查解决
Office Interop Word 突发异常问题复盘与解决参考
问题现象
- 业务代码已稳定运行约1年,近期突然抛出
Word has encountered a problem异常 - 可手动正常打开目标Word文件(fileName),项目内Word程序集引用状态无异常
- 调试Word Application对象时,AnswerWizard属性抛出COMException
相关代码如下:
var appWord = new Microsoft.Office.Interop.Word.Application(); var doc = new Document(); doc = appWord.Documents.Add(Template: fileName);
AnswerWizard异常信息:
'((Microsoft.Office.Interop.Word.ApplicationClass)appWord).AnswerWizard' threw an exception of type 'System.Runtime.InteropServices.COMException'
系统事件日志内容:
服务器端身份验证级别策略不允许来自地址192.168.40.204的用户SERA\EPBASVR$ SID(S-1-5-21-3869734172-4259265755-3048270987-18749)激活DCOM服务器,请在客户端应用中将激活身份验证级别至少提升至RPC_C_AUTHN_LEVEL_PKT_INTEGRITY。
根因定位
问题本质是DCOM激活身份验证级别不匹配:期间微软推送的Office更新临时调整了Word DCOM服务器的安全校验策略,要求客户端激活时的身份验证等级最低为RPC_C_AUTHN_LEVEL_PKT_INTEGRITY,旧版本代码调用时未满足该要求,因此触发COM异常。
可行修复方案
如果后续再出现同类问题,可采用以下两种方案解决:
- 调整DCOM配置:打开组件服务(运行输入
dcomcnfg),找到Microsoft Word 应用程序的DCOM配置项,在安全选项卡中给对应服务账号(SERA\EPBASVR$)授予本地激活、远程激活权限,也可按需降低激活权限校验要求 - 代码层面调整认证等级:初始化Word Application对象前,通过Windows API设置当前线程的RPC认证等级为
RPC_C_AUTHN_LEVEL_PKT_INTEGRITY,再创建Interop对象即可通过校验
后续情况说明
该问题出现两周后自行恢复,未做任何人工调整,大概率是微软后续推送的Office补丁回退了上述临时安全策略,或是修复了策略校验的逻辑bug。
内容的提问来源于stack exchange,提问作者DavidLP
相关产品推荐
相关产品推荐

