使用PowerShell App Deployment Toolkit部署MSI时证书信任问题求助
解决MSI安装时的非可信发布者提示问题
看起来你遇到的核心问题是证书没有正确安装到机器级的可信存储中——虽然你的certutil命令看起来没报错,但实际执行逻辑和参数存在关键问题。我来帮你拆解原因并给出修复方案:
1. 你的certutil命令存在格式错误
你把两个certutil操作合并成了一行,但没有正确分隔,导致第二个命令根本没被执行(它会被当成第一个命令的额外参数)。更重要的是:默认情况下certutil -addstore会把证书安装到当前用户的存储,而MSI是机器级安装,需要证书在本地机器的TrustedPublisher和Root存储里。
修正后的正确命令
要安装到机器级存储,必须加上-localmachine参数,同时用-f强制覆盖已存在的证书(避免重复安装的冲突):
# 安装证书到本地机器的TrustedPublisher存储 certutil.exe -addstore -f -localmachine TrustedPublisher "cert.cer" # 安装证书到本地机器的Root存储 certutil.exe -addstore -f -localmachine Root "cert.cer"
2. 在PSADT中正确执行命令
建议用PSADT自带的Execute-Process函数运行certutil,它能更好地处理路径、权限并捕获执行状态。假设你的cert.cer放在PSADT的SupportFiles目录下,脚本可以这么写:
# 安装到TrustedPublisher Execute-Process -Path "certutil.exe" -Parameters "-addstore -f -localmachine TrustedPublisher `"$dirSupportFiles\cert.cer`"" -WindowStyle Hidden # 安装到Root Execute-Process -Path "certutil.exe" -Parameters "-addstore -f -localmachine Root `"$dirSupportFiles\cert.cer`"" -WindowStyle Hidden
3. 关键的权限验证
务必确保你的PSADT脚本是以管理员权限运行的!修改本地机器的证书存储需要管理员权限,如果是普通用户权限执行,certutil可能会静默失败(看起来没报错,但实际根本没把证书写入机器存储)。
4. 验证证书安装是否成功
执行完命令后,手动确认证书状态:
- 按下Win+R输入
certlm.msc打开本地机器证书管理器 - 依次展开
Trusted Publishers → Certificates和Trusted Root Certification Authorities → Certificates,检查你的证书是否存在 - 右键MSI文件→属性→数字签名,查看签名证书的指纹,和你安装的
cert.cer指纹对比,确保是同一个证书
5. 额外排查点:证书链完整性
如果证书确实安装了但还是提示,可能是MSI的签名证书依赖中间证书,而你只安装了根证书。这种情况下,需要把完整的证书链(中间证书+根证书)都安装到对应的存储中。
内容的提问来源于stack exchange,提问作者mpeytonfan18
相关产品推荐
相关产品推荐

