我需要在win11下安装SolidWorks,期间需要安装安装VCRedist10,但是一安装这个组件(在安装包PreReqs\VCRedist10下的vcredist_x64.exe)就报系统策略禁止这个安装。
vcredist_x64.exe 安装失败(错误 1625)排除方法
故障现象
运行 vcredist_x64.exe 安装时失败,返回错误码 1625,提示"系统策略禁止这个安装"。
故障原因
注册表 HKLM\SOFTWARE\Classes\Installer\Products\ 下存在该产品的残留空键,导致 Windows Installer 误判产品为"托管安装(managed)"状态,系统策略拒绝对托管产品进行重新安装。
排查步骤
1. 确认错误码
powershell
$proc = Start-Process -FilePath ".\vcredist_x64.exe" -ArgumentList "/q" -Wait -PassThru
$proc.ExitCode # 如果输出 1625,则属于此问题
2. 获取产品 GUID
从安装包提取 MSI 查看详细日志:
powershell
# 提取 MSI
mkdir "$env:TEMP\vcredist_extract" -ErrorAction SilentlyContinue
Start-Process -FilePath ".\vcredist_x64.exe" -ArgumentList "/extract:`"$env:TEMP\vcredist_extract`"" -Wait
# 用 MSI 安装并生成日志
msiexec /i "$env:TEMP\vcredist_extract\vc_red.msi" /qn /l*v "$env:TEMP\vcredist_log.txt"
# 查看日志中的 Product Code
Select-String "Product Code" "$env:TEMP\vcredist_log.txt"
日志中会出现类似:
Product Code from property table: '{1D8E6291-B0D5-35EC-8441-6616F567A0F7}'
Product {1D8E6291-B0D5-35EC-8441-6616F567A0F7} is managed.
3. GUID 转 SQUID
Windows Installer 在注册表中使用 SQUID 格式存储产品 ID:
- 将 GUID 中每段字符逆序排列
- 示例:
{1D8E6291-B0D5-35EC-8441-6616F567A0F7}→1926E8D15D0BCE53481466615F760A7F
转换规则(去掉花括号和横线后):
| GUID 段 | 逆序 |
|---|---|
1D8E6291 |
1926E8D1 |
B0D5 |
5D0B |
35EC |
CE53 |
8441 |
1448 |
6616F567A0F7 |
66615F760A7F |
4. 删除残留注册表键(修复)
powershell
reg delete "HKLM\SOFTWARE\Classes\Installer\Products\<SQUID>" /f
以 VC++ 2010 x64 为例:
powershell
reg delete "HKLM\SOFTWARE\Classes\Installer\Products\1926E8D15D0BCE53481466615F760A7F" /f
5. 重新安装
powershell
.\vcredist_x64.exe /q
# 返回 0 即成功
已知的产品 SQUID
| 安装包 | Product Code | SQUID |
|---|---|---|
| VC++ 2010 x64 | {1D8E6291-B0D5-35EC-8441-6616F567A0F7} |
1926E8D15D0BCE53481466615F760A7F |
| VC++ 2010 x86 | {F0C3E5D1-1ADE-321E-8167-68EF0DE699A5} |
1D5E3C0FEDA1E123187686FED06E995A |
如遇到其他版本的同类问题,按上述方法获取 GUID 并转换即可。