Office 2024/Microsoft 365 中 ActiveX 无法运行的原因与排查步骤
· 小村 豪 · ActiveX, COM, Office, Microsoft 365, 32bit, 64bit, Windows, 现有资产利用
首先要了解的事
在 Office 2024 与 Microsoft 365 中,ActiveX 控件默认处于禁用状态。 以前能正常使用的 Excel 按钮、表单,以及 Word / PowerPoint 中的嵌入对象,在更新后突然看起来「无法运行」,大多 不是程序故障,而是安全默认值变更 所致。
原因大致可分为 3 类。
- 安全设置变化(信任中心、ActiveX 默认禁用)
- 32bit / 64bit 不一致(在 64bit Office 上加载仅支持 32bit 的控件)
- COM 注册或依赖 DLL / 运行时不足(未运行 regsvr32、缺少 VC++ 运行时)
实务铁律:按这个顺序从上往下排查最快。
Office 2024 系列 vs Microsoft 365 ── 区别在哪里
| 视角 | Office 2024 系列(永久授权) | Microsoft 365 Apps(订阅制) |
|---|---|---|
| 更新模式 | 只提供安全 / 质量更新,不新增功能 | 按频道持续更新功能 |
| ActiveX 默认值 | 默认禁用 | 默认禁用(相同) |
| 注册表 / 策略路径 | 仍为 16.0 | 仍为 16.0 |
| 支持的操作系统(截至 2026 年) | Windows 11、Server 2025 / 2022、Win10 LTSC | Windows 11、Server 2025 / 2022 为正式要求。Win10 有到 2028 年 10 月的过渡缓冲期 |
| 安装方式 | Click-to-Run(非 MSI) | Click-to-Run |
重点:即使是 Office 2024,注册表路径依然是 16.0。「因为是 2024 所以要找 24.0」是常见的弯路。
Windows 10 的注意事项
Windows 10 的常规支持已于 2025 年 10 月 14 日结束。不过 Microsoft 365 Apps 在 Windows 10 上仍处于 到 2028 年 10 月 10 日为止 提供安全更新的过渡缓冲期。也就是说:
- 并不是「在 Windows 10 上完全无法运行」
- 是「操作系统已停止支持、Apps 仍在缓冲期」这种双重前提下运行的状态
故障排查全貌
flowchart TD
A[复现症状] --> B[采集 Office 产品名称·内部版本·bitness·操作系统信息]
B --> C{操作系统 / Office 的支持前提是否 OK?}
C -- 不行 --> C1[修正前提:重新审视操作系统 / Office 版本 / 频道]
C -- OK --> D[检查信任中心]
D --> E{ActiveX 设置 / 受保护的视图 / 受信任文档有问题?}
E -- 有 --> E1[修正设置·签名·分发方案]
E -- 没有 --> F{属于旧版 Web / IE 场景?}
F -- 是 --> F1[检查 IE 模式与站点列表]
F -- 否 --> G[检查 CLSID / InprocServer32 / TypeLib]
G --> H{COM 注册是否正常?}
H -- 不行 --> H1[regsvr32 / RegAsm / 重新安装]
H -- OK --> I[检查依赖 DLL / .NET / VC++ 运行时]
I --> J{依赖关系是否满足?}
J -- 不行 --> J1[修复·重新分发对应运行时]
J -- OK --> K[采集日志 / Procmon / Process Explorer]
K --> L[比对内部版本差异·安全更新差异]
Step 1 ── 采集环境信息
首先务必记录以下信息。因为要靠 数值 而不是感觉来判断。
Office 端
- 在 【文件】→【账户】→【产品信息】 中确认
- 产品名称(区分 Office 2024 / Microsoft 365)
- 版本与 内部版本号(最重要)
- 安装类型(Click-to-Run)
- 在 【关于 Excel】/【关于 Word】 等产品信息对话框中确认是 32bit 还是 64bit
Windows 端
# 操作系统基本信息
Get-CimInstance Win32_OperatingSystem |
Select-Object Caption, Version, BuildNumber, OSArchitecture
# Office 进程的可执行文件路径
Get-Process WINWORD, EXCEL, POWERPNT, VISIO -ErrorAction SilentlyContinue |
Select-Object ProcessName, Path
常见误区
| 误区 | 正确思路 |
|---|---|
| 用「是最新版本」了事 | 要确认 内部版本号。Microsoft 365 的频道差异很大 |
| 在 64bit Office 上加载仅支持 32bit 的 COM / ActiveX | Office 的 bitness 与 COM 的 bitness 必须一致 |
| 认定「Windows 10 就是不行」 | 处于过渡缓冲期,有可能仍能运行,但前提并不稳定 |
Step 2 ── 检查信任中心与安全设置
这一步要做的是区分 「文件本身被阻止」 还是 「COM 实体加载失败」。
检查清单(依次向下)
| # | 检查项 | 检查位置 | 常见原因 |
|---|---|---|---|
| 1 | ActiveX 消息栏 | 打开文件时出现的黄色消息栏 | 默认禁用。尝试用 【启用内容】 看是否能临时运行 |
| 2 | 信任中心 > ActiveX 设置 | 【文件】>【选项】>【信任中心】 | 是否设置为「未经通知即禁用全部」 |
| 3 | 受保护的视图 | 信任中心 > 受保护的视图 | 从网络共享或邮件附件打开会被阻止 |
| 4 | 受信任的文档 | 信任中心 > 受信任的文档 | 一旦被信任过,警告就不会再出现,复现结果会因终端而异 |
| 5 | 受信任的发布者 | 信任中心 > 受信任的发布者 | 即使有签名,若证书未分发也不会被允许 |
| 6 | 宏设置 | 信任中心 > 宏设置 | 宏与 ActiveX 是不同的设置,但有时会综合产生影响 |
先尝试这些
- 将出问题的文件复制到 本地受管理的文件夹(例如
C:\Temp),另存为新文件 - 避免直接从网络共享或邮件附件打开(排除受保护的视图的影响)
- 以 安全模式 启动 Office,排除加载项的影响
excel /safe
winword /safe
powerpnt /safe
Step 3 ── 确认是否依赖 IE 模式
原本以为是「普通的 ActiveX 故障」,实际上有时是因为 Edge 的 IE 模式未配置 所致。
- IE 模式不是整个浏览器的开关,而是 只应用于已添加到 Enterprise Site List 的网站
- 如果只有内部 Web 系统的一部分无法运行,请检查该网站是否属于 IE 模式对象
检查位置如下:
- Edge 策略:管理模板 > Microsoft Edge
- 注册表:
HKLM\SOFTWARE\Policies\Microsoft\Edge - 诊断页面:
edge://compat/iediagnostic
Step 4 ── 检查 COM 注册
如果信任中心没有问题,接下来要确认 COM 实体是否正确注册。
基本检查命令
:: 检查 CLSID 的注册状态
reg query "HKLM\SOFTWARE\Classes\CLSID\{YOUR-CLSID-HERE}\InprocServer32" /s
:: 原生 COM / ActiveX DLL 的注册·卸载
regsvr32 C:\Path\YourControl.dll
regsvr32 /u C:\Path\YourControl.dll
.NET 编写的 COM(重要)
.NET 程序集不能使用 regsvr32,需要使用 RegAsm。
:: 64bit Windows 上的 32bit Office → 使用 Framework 下的 RegAsm
"C:\Windows\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe" "C:\Path\YourControl.dll" /codebase /tlb
:: 64bit Office → 使用 Framework64 下的 RegAsm
"C:\Windows\Microsoft.NET\Framework64\v4.0.30319\RegAsm.exe" "C:\Path\YourControl.dll" /codebase /tlb
典型事故:「RegAsm 的 bitness 与 Office 的 bitness 不一致」→ 注册表中显示注册成功,但 Office 却找不到。
Step 5 ── 检查依赖 DLL / 运行时
「主体 DLL 存在却无法加载」的情况,大多是 依赖对象缺失 所致。
实务中常缺失的运行时
| 容易缺失的项目 | 检查方法 |
|---|---|
| Visual C++ 可再发行组件包(2013、2015-2022) | 在控制面板 > 程序和功能中查看列表 |
| .NET Framework 4.8.1 | reg query "HKLM\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full" |
| 依赖 DLL(厂商自有) | 用 Process Explorer / Procmon 确认 |
底层排查工具
| 工具 | 用途 |
|---|---|
| Process Explorer | 查看进程加载的 DLL 列表 |
| Procmon | 实时追踪 NAME NOT FOUND / PATH NOT FOUND / ACCESS DENIED |
用 Procmon 采集复现时的日志,用 NAME NOT FOUND 过滤,就能一目了然看出哪个 DLL 或注册表项没找到。
Step 6 ── 获取日志做最终确认
如果到这一步还找不出原因,就启用日志,捕捉复现的瞬间。
启用 Office 常规日志
reg add HKCU\Software\Microsoft\Office\16.0\Common\Logging /v EnableLogging /t REG_DWORD /d 1
启用 Click-to-Run 详细日志
reg add HKLM\SOFTWARE\Microsoft\ClickToRun\OverRide /v LogLevel /t REG_DWORD /d 3
reg add HKLM\SOFTWARE\Microsoft\ClickToRun\OverRide /v PipelineLogging /t REG_DWORD /d 1
日志会输出到 %windir%\temp 或 %temp%。
同时结合事件查看器
eventvwr.msc
- 检查 Windows 日志 > 应用程序
- .NET Runtime 或 SideBySide 的错误往往是决定性的线索
验证后别忘记禁用日志
reg delete HKCU\Software\Microsoft\Office\16.0\Common\Logging /v EnableLogging /f
reg delete HKLM\SOFTWARE\Microsoft\ClickToRun\OverRide /v PipelineLogging /f
reg delete HKLM\SOFTWARE\Microsoft\ClickToRun\OverRide /v LogLevel /f
主要注册表 / 策略速查表
必须记住的 4 个路径
| 用途 | 路径 |
|---|---|
| Office 策略根路径 | HKLM\SOFTWARE\Policies\Microsoft\Office\16.0 |
| 确认是否全面禁用 ActiveX | HKCU\Software\Microsoft\Office\Common\Security\DisableAllActiveX(1=禁用,0=解除) |
| COM 实体注册 | HKLM\SOFTWARE\Classes\CLSID\{CLSID}\InprocServer32 |
| Office COM kill bit | HKLM\Software\Microsoft\Office\16.0\Common\COM Compatibility\{CLSID} |
在 64bit Windows 上使用 32bit Office 时,COM 相关项目也要检查
Wow6432Node之下。
常用测试注册表(仅供验证)
Windows Registry Editor Version 5.00
; 仅供测试:解除 ActiveX 全面禁用
[HKEY_CURRENT_USER\Software\Microsoft\Office\Common\Security]
"DisableAllActiveX"=dword:00000000
警告:这些设置仅供验证使用。永久方案请通过「可信的分发渠道与签名」来实现。
常见症状与对策
| 症状 | 最可能的原因 | 首先尝试的做法 |
|---|---|---|
| 更新后按钮没有反应 | ActiveX 默认禁用 | 消息栏 →【启用内容】→ 检查信任中心 |
| 只在 64bit Office 上失败 | 仅支持 32bit 的 COM / ActiveX | 向厂商确认是否有 x64 版本,没有则切换到 32bit Office |
| 只有特定电脑无法运行 | COM 未注册 / 注册损坏 | 用 reg query 确认 CLSID → 用 regsvr32 重新注册 |
| DLL 存在却无法加载 | 依赖 DLL / VC++ 运行时不足 | 用 Procmon 追踪 NAME NOT FOUND |
| 从网络共享或邮件附件打开时失败 | 受保护的视图 / MOTW | 复制到本地文件夹比对复现差异 |
| 只有内部 Web 系统的一部分失败 | IE 模式未配置 | 将目标网站添加到 Enterprise Site List |
| 已签名却仍不被允许 | 证书未分发 / 受信任的发布者未注册 | 确认代码签名的有效性与证书分发情况 |
| 沿用 MSI 时代的部署流程导致行为变化 | 转向 Click-to-Run 前提 | 重新审视旧脚本或以自注册为前提的设计 |
企业推荐设置
永久方案的基本原则是 「不是降低整体安全性,而是只针对必要对象做有限度的允许」。
| 项目 | 建议 |
|---|---|
| 更新频道(Microsoft 365) | 对旧版 ActiveX 依赖度高的终端,建议使用 月度企业版频道(变更较易掌握) |
| Office bitness | 除非厂商明确声明支持 x64,否则优先考虑 32bit Office |
| Trusted Locations | 网络上的信任位置 原则上禁止,需要时采用例外申请方式 |
| 签名 | 自行分发的 ActiveX / 宏 / 加载项要 进行代码签名,并集中管理 Trusted Publisher |
| IE 模式 | 只将必要的 URL 添加到 Enterprise Site List(避免整体老化) |
| 部署前验证 | 正式分发前建立 pilot ring,用具代表性的报表 / 终端固定内部版本验证 |
Microsoft 365 部署设置示例(32bit + 月度企业版)
<Configuration>
<Add OfficeClientEdition="32" Channel="MonthlyEnterprise">
<Product ID="O365ProPlusRetail">
<Language ID="ja-jp" />
</Product>
</Add>
<Updates Enabled="TRUE" />
<Display Level="None" AcceptEULA="TRUE" />
</Configuration>
最后手段 ── 修复
- 快速修复 / 联机修复 对设置或注册损坏有效
- 但无法解决 x86 / x64 不一致,或签名 / 策略问题本身
- 修复要放在「最后」执行(先执行会污染调查用的日志)
命令速查表
| 目的 | 命令 |
|---|---|
| 以安全模式启动 | excel /safe / winword /safe |
| 注册 COM DLL | regsvr32 xxx.dll |
| 卸载 COM DLL | regsvr32 /u xxx.dll |
| 注册 .NET COM(32bit Office) | Framework\v4.0.30319\RegAsm.exe xxx.dll /codebase /tlb |
| 注册 .NET COM(64bit Office) | Framework64\v4.0.30319\RegAsm.exe xxx.dll /codebase /tlb |
| 备份注册表 | reg export HKCU\... backup.reg /y |
| 启用 Office 常规日志 | reg add HKCU\Software\...\Logging /v EnableLogging /t REG_DWORD /d 1 |
| 启用 Click-to-Run 详细日志 | reg add HKLM\SOFTWARE\...\OverRide /v LogLevel /t REG_DWORD /d 3 |
| 启动事件查看器 | eventvwr.msc |
总结 ── 别弄错排查顺序
设置错误 → 操作系统 / bitness 不一致 → COM 实体问题 → 依赖关系 → 更新差异
ActiveX 的问题乍看只是「Excel 的问题」,实际上是 Office 的默认安全 + Windows 的支持前提 + COM 实体注册 + 依赖运行时 + 更新模式 这 5 层交织在一起的问题。与其贸然放宽设置,依次从上往下排查,才能得到不容易再次发生的修复方案。
参考链接
- ActiveX controls are disabled by default in Microsoft 365 and Office 2024 ─ 默认禁用的影响范围
- Enable or disable ActiveX settings in Office files ─ 最贴近用户操作的资料
- Update history for Office LTSC 2024 and Office 2024 ─ 内部版本对比、更新前后差异
- Overview of update channels for Microsoft 365 Apps ─ Current / Monthly Enterprise / Semi-Annual 的差异
- Release Information for Updates to Microsoft 365 Apps ─ 频道导致的行为差异
- Compatibility between the 32-bit and 64-bit versions of Office ─ 涉及 ActiveX / COM 资产时的判断依据
- Microsoft Edge 中的 Internet Explorer 模式 ─ Enterprise Site List 与策略
- regsvr32 命令 ─ 原生 COM 的注册 / 卸载
- Regasm.exe(程序集注册工具) ─ .NET 编写的 COM 的注册
- Process Monitor (Procmon) ─ 追踪 NAME NOT FOUND / PATH NOT FOUND
- Process Explorer ─ 进程的 DLL 加载状态
- Latest supported Visual C++ Redistributable Downloads ─ 查询 VC++ 运行时缺失情况
- .NET Framework 安装指南 ─ 确认 .NET Framework 版本
相关文章
共享相同标签的最新文章。可以围绕相近的主题进一步加深理解。
COM/OCX/ActiveX 开发中容易踩坑的注册与位数陷阱
本文从实务角度整理 COM、OCX、ActiveX 开发中容易踩坑的 32bit/64bit、Visual Studio 2022、regsvr32/Regasm、管理员权限、HKCR、STA/MTA 等问题。
委托开发 Windows 应用程序前该梳理的事项
在委托外包开发 Windows 应用程序之前,梳理现有软件改造、设备联动、COM/ActiveX、发布与更新、维护等需要注意的要点。
开发者的奇爱,或者我如何学会停止焦虑并爱上Windows
Windows很麻烦。但这种麻烦,恰恰是因为它是一个长年背负着现实业务的操作系统才会有的麻烦。
为 VBScript 弃用做准备:VBA·企业内部工具排查指南
本文整理 VBScript 分阶段弃用前,VBA、Excel 宏与企业内部工具的资产排查、静态检测、执行日志采集、替代技术选型、测试与分阶段推广的做法。
32 位应用调用 64 位 DLL 的 COM 桥接实例
本文整理当 32 位应用无法直接调用 64 位 DLL 时,通过 COM 桥接进行集成的思路,并结合 Windows 的限制、架构设计与处理流程加以说明。
常见问题
汇总了咨询这一主题时常见的问题。
- Office 2024 或 Microsoft 365 中 ActiveX 默认被禁用是什么意思?
- 在 Office 2024 与 Microsoft 365 中,ActiveX 控件默认处于禁用状态。以前能正常使用的 Excel 按钮、表单,以及 Word / PowerPoint 中的嵌入对象,在更新后突然「无法运行」,大多不是程序故障,而是这一安全默认值变更所致。打开文件时出现的黄色消息栏中选择【启用内容】,看是否能临时运行,并检查信任中心(Trust Center)的 ActiveX 设置,是第一步该做的事。
- Office 更新后,Excel 的 ActiveX 按钮变得没有反应。应该先检查什么?
- 原因大致可分为 3 类:第一类是安全设置变化(信任中心、ActiveX 默认禁用、受保护的视图),第二类是 32bit / 64bit 不一致(在 64bit Office 上加载仅支持 32bit 的控件),第三类是 COM 注册或依赖 DLL / 运行时不足(未运行 regsvr32、缺少 VC++ 运行时)。按这个顺序从上往下排查最快。同时,一开始就应记录产品名称、内部版本号、Office 的 bitness、操作系统信息,并避免直接从网络共享或邮件附件打开,改用本地文件夹比对复现差异。
- 为什么只有在 64bit Office 上 ActiveX 控件无法运行?
- 因为 Office 的 bitness 与 COM / ActiveX 的 bitness 必须一致。在 64bit Office 上加载仅支持 32bit 的控件不会运行。请向厂商确认是否有 x64 版本,如果没有则考虑切换到 32bit Office。如果是用 .NET 编写的 COM,要用 RegAsm 而不是 regsvr32:32bit Office 用 Framework、64bit Office 用 Framework64 中的 RegAsm 来注册。如果 RegAsm 的 bitness 与 Office 不一致,就会出现注册表中显示注册成功,但 Office 却找不到的典型事故。
- 要让 ActiveX 能够永久使用,应该怎么设置?
- 基本原则不是全面降低安全性,而是只针对必要的对象做有限度的允许。DisableAllActiveX 这项注册表更改纯粹用于验证,永久方案要依靠可信的分发渠道与签名来完成。具体来说,为自行分发的 ActiveX / 宏 / 加载项进行代码签名并集中管理 Trusted Publisher,在 Microsoft 365 中可考虑采用变更较易掌握的月度企业版频道,除非厂商明确声明支持 x64,否则优先考虑 32bit Office。正式分发前应建立 pilot ring,用具代表性的报表和终端固定内部版本进行验证。
作者简介
本文作者的个人简介页面。
Go Komura
小村软件有限公司 代表
以 Windows 软件开发、技术咨询与故障排查为中心,擅长难以复现的故障调查,以及既有资产仍在运行的项目。