WinHttpRequest设置证书吊销检查选项触发无效调用错误求助
解决WinHttp在Win7 SP1 VBA中设置证书吊销检查的报错问题
我之前也碰到过类似的WinHttp证书配置兼容性问题,结合你的环境(Win7 SP1 + Excel 2010 32位),这个0x80042b04错误(无效过程调用或参数)通常和系统组件更新、版本兼容性有关,下面是几个经过验证的排查和解决步骤:
1. 补全WinHttp的系统更新
虽然官方文档标注WinHttp 6.1.7601.24000支持选项18(EnableCertificateRevocationCheck),但部分Win7 SP1系统因为更新不完整,实际并未启用该功能。你需要安装以下两个关键更新:
- KB2990941:修复WinHttp的证书验证组件漏洞
- KB3009976:补充WinHttp对证书吊销检查选项的支持
安装完成后重启电脑,再测试代码即可。可以通过命令提示符检查当前WinHttp版本:
reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WinHttp" /v Version
确保版本不低于6.1.7601.18209。
2. 改用VBA-Web库的内置配置
既然你已经在使用VBA-Web库,完全可以绕过直接操作WinHttpRequest对象的方式,用库封装好的兼容性配置:
Dim Client As New WebClient ' 直接通过WebClient的配置项启用证书吊销检查 Client.HttpSettings.EnableCertificateRevocationCheck = True
这个方法会自动适配不同WinHttp版本的API差异,比手动设置Option更稳定。
3. 注册表全局配置(需管理员权限)
如果无法安装系统更新,可以通过注册表全局开启证书吊销检查(会影响所有使用WinHttp的应用):
- 打开注册表编辑器,定位到
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WinHttp - 新建DWORD值,命名为
EnableCertificateRevocationCheck,设置值为1 - 重启Excel后生效
4. 代码层面的降级处理
如果以上方法都无法实施,可以在代码中添加错误捕获,避免程序崩溃:
Set web_Http = CreateObject("WinHttp.WinHttpRequest.5.1") On Error Resume Next ' 直接使用数值18代替常量,避免常量定义可能带来的问题 web_Http.Option(18) = True If Err.Number <> 0 Then Debug.Print "无法启用证书吊销检查: " & Err.Description Err.Clear End If On Error GoTo 0
内容的提问来源于stack exchange,提问作者eekboom
相关产品推荐
相关产品推荐

