Windows更新KB5015807后AxSHDocVw.AxWebBrowser无法嵌入Word
问题背景
长期通过AxSHDocVw.AxWebBrowser控件嵌入Word制作邮件合并模板,2022年7月Windows更新KB5015807推送后,原功能失效:Word不再嵌入控件内部,而是独立启动无功能区菜单栏的新实例。此前用于修复同类问题的注册表方案已无法生效。
加载文档的核心代码:
public void LoadDocument(int? documentId, bool hideDocument) { _templateVersionDataRow = Business.BusinessLogic.DocumentTemplate.GetLastVersion(documentId); _filePath = String.Format("{0}{1}.doc", Path.GetTempPath(), Guid.NewGuid()); File.WriteAllBytes(_filePath, _templateVersionDataRow.Template); if (!hideDocument) BrowserFrame.Navigate(_filePath); }
原失效的注册表修复内容:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Word.Document.8]
"BrowserFlags"=dword:80000024
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Word.RTF.8]
"BrowserFlags"=dword:80000024
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Word.Document.12]
"BrowserFlags"=dword:80000024
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Word.DocumentMacroEnabled.12]
"BrowserFlags"=dword:80000024
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Excel.Sheet.8]
"BrowserFlags"=dword:80000A00
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Excel.Sheet.12]
"BrowserFlags"=dword:80000A00
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Excel.SheetMacroEnabled.12]
"BrowserFlags"=dword:80000A00
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Excel.SheetBinaryMacroEnabled.12]
"BrowserFlags"=dword:80000A00
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\PowerPoint.Show.8]
"BrowserFlags"=dword:800000A0
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\PowerPoint.Show.12]
"BrowserFlags"=dword:800000A0
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\PowerPoint.ShowMacroEnabled.12]
"BrowserFlags"=dword:800000A0
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\PowerPoint.SlideShow.8]
"BrowserFlags"=dword:800000A0
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\PowerPoint.SlideShow.12]
"BrowserFlags"=dword:800000A0
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\PowerPoint.SlideShowMacroEnabled.12]
"BrowserFlags"=dword:800000A0
可行解决方案
1. 补充64位系统注册表项
KB5015807可能修改了64位系统下的注册表路径,需添加Wow6432Node下的对应项:
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\Word.Document.8] "BrowserFlags"=dword:80000024 [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\Word.RTF.8] "BrowserFlags"=dword:80000024 [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\Word.Document.12] "BrowserFlags"=dword:80000024 [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\Word.DocumentMacroEnabled.12] "BrowserFlags"=dword:80000024
导入注册表后重启应用测试。
2. 启用Word的DDE支持
部分更新会默认禁用DDE,导致嵌入触发失效:
- 打开Word,进入文件>选项>高级
- 在常规区域勾选允许来自Office程序的DDE
- 重启Word和应用程序
3. 替换Navigate为Navigate2方法
尝试使用Navigate2并添加强制嵌入的参数:
if (!hideDocument) BrowserFrame.Navigate2(new Uri(_filePath), 0x00000020); // 0x20参数强制在控件内打开
该参数会覆盖默认的新窗口打开行为,强制文档嵌入控件。
4. 迁移至WebView2控件
AxSHDocVw基于IE内核已停止维护,推荐切换到WebView2(Chromium内核),对Office文档嵌入支持更稳定:
- 安装
Microsoft.Web.WebView2NuGet包 - 替换原有控件为WebView2,加载代码改为:
webView2.CoreWebView2.Navigate($"file:///{_filePath}");
需确保客户端已安装WebView2运行时。
5. 安装Office后续更新补丁
KB5015807的问题可能在后续Office安全更新中被修复,检查并安装最新的Office补丁,部分用户反馈更新后嵌入功能自动恢复。
内容的提问来源于stack exchange,提问作者Award

