安装 Visual Studio 2017 时无法安装 Microsoft.VisualStudio.Community.Msi
结论
安装失败是注册表权限异常导致的。Microsoft.VisualStudio.Community.Msi 写入 PrimaryInteropAssemblyName 时触发了 Windows Installer 错误 1406,安装随后以通用错误 1603 结束。
更换 Visual Studio 安装包、调整 workloads 或暂时关闭 antivirus 通常解决不了这个问题。先修复 GUID 为 {7C0FFAB0-CD84-11D0-949A-00A0C91110ED} 的注册表项权限,再以管理员身份重试安装。
为什么会安装失败
日志中的这两项最值得关注:
Message Id: 1406
Could not write value PrimaryInteropAssemblyName to key
\Software\Classes\TypeLib{7C0FFAB0-CD84-11D0-949A-00A0C91110ED}\1.0
Return code: 1603
Fatal error during installation.
1603 表示 MSI 安装遇到了致命错误。1406 给出了具体原因:安装程序无法写入指定的注册表项。
日志中的路径可能漏掉了 TypeLib 与 GUID 之间的反斜杠。对应项通常位于:
HKEY_CLASSES_ROOT\TypeLib\{7C0FFAB0-CD84-11D0-949A-00A0C91110ED}\1.0
在 64 位 Windows 上,还需要检查 32 位注册表视图,例如:
HKEY_CLASSES_ROOT\WOW6432Node\TypeLib\{7C0FFAB0-CD84-11D0-949A-00A0C91110ED}\1.0
HKEY_CLASSES_ROOT 是合并视图,实际数据也可能存放在:
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\TypeLib\{7C0FFAB0-CD84-11D0-949A-00A0C91110ED}\1.0
或:
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\TypeLib\{7C0FFAB0-CD84-11D0-949A-00A0C91110ED}\1.0
具体位置取决于 Windows 位数、MSI 使用的注册表视图,以及该项原来的注册范围。
解决步骤
1. 创建还原点并备份注册表项
修改注册表权限前,建议创建系统还原点。
以管理员身份打开“命令提示符”,分别检查 64 位和 32 位注册表视图:
reg query "HKLM\SOFTWARE\Classes\TypeLib\{7C0FFAB0-CD84-11D0-949A-00A0C91110ED}\1.0" /reg:64
reg query "HKLM\SOFTWARE\Classes\TypeLib\{7C0FFAB0-CD84-11D0-949A-00A0C91110ED}\1.0" /reg:32
查到注册表项后,先将其导出备份。根据实际存在的视图执行相应命令:
reg export "HKLM\SOFTWARE\Classes\TypeLib\{7C0FFAB0-CD84-11D0-949A-00A0C91110ED}\1.0" "%USERPROFILE%\Desktop\vs-typelib-backup-64.reg" /y /reg:64
reg export "HKLM\SOFTWARE\Classes\TypeLib\{7C0FFAB0-CD84-11D0-949A-00A0C91110ED}\1.0" "%USERPROFILE%\Desktop\vs-typelib-backup-32.reg" /y /reg:32
如果命令提示路径不存在,请在注册表编辑器中搜索完整 GUID,不要自行创建空项。
2. 修复目标注册表项的权限
按 Win + R,输入:
regedit
以管理员身份打开注册表编辑器,然后按以下步骤操作:
-
选择“编辑”中的“查找”,搜索:
{7C0FFAB0-CD84-11D0-949A-00A0C91110ED} -
找到
TypeLib下对应的1.0项。 -
右键该项,选择“权限”。
-
打开“高级”。
-
查看该项是否从父对象继承权限。如果继承已关闭,并且没有明确的管理权限,可以启用继承。
-
确认
Administrators和SYSTEM至少有读取权限,同时允许安装过程写入该项。通常可以为这两个主体授予“完全控制”。 -
如果无法修改权限,可暂时将所有者改为本机的
Administrators组,然后设置权限。 -
将权限应用到该项及其子项。
不同语言版本的 Windows 可能会使用本地化的账户名称。选择账户时,可以通过“高级”中的“立即查找”找到内置的 Administrators 和 SYSTEM。
修改范围应限于日志点名的 GUID 项。不要为普通用户授予整个 HKEY_CLASSES_ROOT、Classes 或 TypeLib 树的完全控制权限。
3. 检查是否存在显式拒绝权限
在“高级安全设置”中查看是否有 Deny 类型的权限条目。显式拒绝通常优先于允许权限,所以当前账户即使属于 Administrators,也可能无法写入。
如果拒绝项来自公司域策略、终端管理工具或安全软件策略,请先联系系统管理员确认,不要直接删除。本地修改可能会被策略自动恢复。
4. 重新启动并修复 Visual Studio
关闭注册表编辑器并重新启动 Windows,然后:
- 右键 Visual Studio Installer。
- 选择“以管理员身份运行”。
- 找到 Visual Studio 2017 Community。
- 先执行“重试”或“修复”。
- 如果安装器仍提示缺少组件,再通过“修改”重新应用原来的 workloads。
一般不必先删除全部 workloads。日志中会列出多个受影响的组件,是因为它们都依赖同一个安装失败的基础 MSI,并非每个组件都存在问题。
如果仍然出现 1406
确认修改了正确的注册表视图
64 位 Windows 同时有 32 位和 64 位注册表视图。如果修复一个位置后错误没有变化,MSI 可能正在写入另一个视图。
重新检查最新的 dd_setup_*.log,确认报错的 GUID、值名和路径是否仍然相同。也可以再次运行:
reg query "HKLM\SOFTWARE\Classes\TypeLib\{7C0FFAB0-CD84-11D0-949A-00A0C91110ED}\1.0" /s /reg:64
reg query "HKLM\SOFTWARE\Classes\TypeLib\{7C0FFAB0-CD84-11D0-949A-00A0C91110ED}\1.0" /s /reg:32
检查系统文件
如果多个 MSI 都遇到注册表访问错误,可以在管理员命令提示符中运行:
DISM.exe /Online /Cleanup-Image /RestoreHealth
sfc /scannow
命令执行完毕后重启 Windows,再运行 Visual Studio Installer。这两条命令用于检查 Windows 组件存储和受保护的系统文件。它们不能保证修复第三方注册表项的 ACL,但可以帮助排查部分系统损坏问题。
使用干净启动环境
修复权限后如果仍然被拒绝,可以在 Windows 干净启动环境中重试,以排查终端防护、注册表监控工具或其他后台服务的拦截。只关闭 antivirus 的界面,不一定会停用相关驱动或防篡改功能。
不要直接删除整个 TypeLib 分支
有些解决方法会建议删除报错的 GUID 项。除非已经确认该项损坏、完成备份并了解它属于哪个组件,否则不建议删除。移除 COM Type Library 注册信息可能影响已经安装的软件。
如果无法取得该项的所有权、权限修改后立即恢复,或计算机由单位管理,请让系统管理员处理相关 ACL 或策略。这类问题已经不属于 Visual Studio Installer 本身能够修复的范围。
备注:内容仅供参考。
