.net - 使用 signtool 对 WIX 工具生成的 setup.exe 进行签名会导致访问被拒绝错误
问题描述
我使用 Wix 工具为我正在创建的应用程序构建安装程序。该项目位于 Azure Devops Server 上,CI 是在 Azure Devops 管道中创建的。有一个专用的 W10 虚拟机托管用于构建应用程序安装程序的 Azure Devops 代理。安装程序构建后,有一个 powershell 脚本步骤 - 它运行singtool.exe以签署Setup.exe文件。问题是这一步失败并且signtool的stderr给出了以下信息:
SignTool Error: Access is denied.
SignTool Error: An error occurred while attempting to sign: C:\agent\_work\2\s\04-Source\bin\Release\Setup.exe
我登录到 VM 并手动运行脚本,我得到了同样的错误。以下是有关我的设置的一些信息:
代理不作为服务运行。它是从以管理员模式运行的 powershell 启动的。
运行构建代理的帐户不是安装证书的帐户,因此签署代码的powershell脚本通过以下方式调用signtool:
Start-Process -FilePath $signTool -ArgumentList $signToolArgumentList -NoNewWindow -Wait -Credential ($certificateHolderCredentials)
包含setup.exe的文件夹没有设置任何特殊权限。
在签名setup.exe的步骤之前,有一个步骤使用完全相同的 powershell 脚本对源代码 .dll 文件进行签名并且它可以工作。
setup.exe未被其他进程锁定 - 我可以轻松修改其名称并将其移动到不同的位置。
当我说我登录到虚拟机时,我的意思是我使用运行代理的帐户的凭据进行了登录。
两个帐户 - “构建代理”和已安装证书的帐户都添加到管理员组。
我试过的:
- 将文件复制到不同的位置 - 我可以使用脚本对副本进行签名,但不能对原始文件进行签名。这不是我想要的方式。
- 更改文件的所有权以建立帐户和持有证书的帐户 - 没有帮助。
- 更改文件夹权限以使所有组都拥有对文件夹及其内容的所有权限 - 没有帮助,即使文件继承了权限。
- 检查文件是否为只读- 它不是:)。
这可能是我对 Windows 权限在这种情况下的工作方式缺乏了解,但我现在没有想法。任何帮助将不胜感激。
解决方案
推荐阅读
- ecmascript-6 - 使用 module.exports 导出函数内的变量以在另一个文件中引用
- excel - 如何使用 laravel 和 vuejs 下载文件
- javascript - 如何使用javascript解决连续问题?
- powerbi - 如果任何子类别错过 100%,如何将类别归零?
- python - QTreeView 'show-decoration-selected: 0;' 没有效果
- delphi - 从 Firemonkey 中的 URL 加载图像
- javascript - Vue.js - 道具的价值正在改变,但我从不改变它(我不希望它改变)
- yocto - 需要帮助将程序映像(BIN 文件)安装到 imx6s 设备
- android - 是否可以从 IntelliJ IDEA 运行现有的 APK?
- asp.net - 公开部分与部分公开?