Windows下用vcpkg构建CMake项目遇权限错误及运行失败问题
解决vcpkg Manifest模式CMake配置阶段applocal.ps1权限拒绝(MSB3075)及运行弹窗问题
问题重现
按照vcpkg Manifest模式官方CMake示例构建项目时,CMake配置阶段编译测试程序触发PostBuildEvent执行applocal.ps1脚本,出现Access is denied错误,导致MSB3075编译失败,同时弹出两次"This app can't run on your PC"提示框。
环境信息
- Visual Studio 2022 Community
- Windows 10 x64(版本19045.3448)
- MSVC v143
- Windows 10 SDK 10.0.20348.0
已尝试无效方案
- 删除CMake缓存并重新配置
- 更换CMake生成器(如Ninja、Visual Studio Generator)
- 命令行直接运行CMake命令
- 管理员身份启动Visual Studio
- 设置程序兼容性模式
- 取消项目目录只读属性
- 重装Visual Studio
可行解决方案
1. 调整PowerShell执行策略
applocal.ps1是PowerShell脚本,Windows默认执行策略可能阻止其运行:
- 以管理员身份打开PowerShell,执行:
Get-ExecutionPolicy - 如果返回
Restricted,执行以下命令放宽策略(推荐RemoteSigned,避免过度开放):Set-ExecutionPolicy RemoteSigned -Scope CurrentUser - 修改完成后重启VS,重新执行CMake配置。
2. 排查杀毒软件拦截
Windows Defender或第三方杀毒软件可能误将applocal.ps1标记为恶意脚本:
- 临时关闭实时保护功能,重新执行CMake配置验证问题是否解决。
- 确认是拦截后,将vcpkg安装目录(默认
C:\vcpkg)添加到杀毒软件信任列表。
3. 临时禁用vcpkg自动复制依赖(Workaround)
如果上述方法无效,可手动跳过applocal脚本执行:
- 在项目CMakeLists.txt中添加配置:
set(VCPKG_APPLOCAL_DEPS OFF) - 配置完成后,手动将依赖DLL复制到程序输出目录,保证程序正常运行。
4. 修复vcpkg脚本
可能是vcpkg脚本文件损坏或权限异常:
- 打开vcpkg安装目录,执行:
.\bootstrap-vcpkg.bat -clean - 重新初始化vcpkg后,删除项目的vcpkg缓存目录(默认在
build/vcpkg_installed),再重新配置CMake。
5. 修复目录权限
确保当前用户对vcpkg安装目录、项目构建目录有完全控制权限:
- 右键目标目录 → 属性 → 安全 → 编辑 → 添加当前用户,授予完全控制权限。
- 应用设置后重启VS。
内容的提问来源于stack exchange,提问作者David Harabagiu
相关产品推荐
相关产品推荐

