背景

背景

背景

我有一台 Windows 7 VM,它有两个用户帐户(condor_usr1 和 condor_usr2),用于源代码编译。condor_usr[1|2] 帐户是管理员组的成员。我有一台 HTCondor 主 VM,它定期接收作业并将每个作业分配到其中一个 condor_usr[1|2] 帐户上运行。Win7 VM 上的 condor 服务作为本地系统帐户运行,但正在执行的作业实际上作为 condor_usr[1|2] 帐户运行。

我有一个新的需求,需要对已编译的可执行文件进行签名。我已将带有私钥的证书导入 Windows 证书存储中的当前用户\个人密钥存储中。

问题

如果我以其中一个 condor_usr 帐户的身份登录 Win7 VM(例如通过远程桌面),则以该帐户身份运行的编译将成功签署可执行文件,但以另一个帐户身份运行的编译将无法签署可执行文件。例如,如果我以 condor_usr2 身份登录,则在 condor_usr2 下运行的编译将成功签名,而在 condor_usr1 下运行的编译将无法签名。如果我注销,两个帐户都无法签名。

我收到的具体错误是:

C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Microsoft\VisualStudio\v15.0\OfficeTools\Microsoft.VisualStudio.Tools.Office.targets(264,9): error MSB3482: An error occurred while signing: The system cannot find the file specified.

打开了一些审计日志,发现与签名失败同时发生的日志如下。

签名失败

目标

无论编译以哪个帐户运行,均可成功签名编译的可执行文件,且无需用户登录。

我目前了解到的情况

  • 正在编译的代码/项目是 Visual Studio 2017 解决方案。
  • 签名方法是ClickOnce清单签名(VS2017项目中的一个选项)。
  • 当启动编译作业时,该作业以 condor_usr[1|2] 身份登录,使用登录类型 2(交互式登录)。 https://ss64.com/nt/syntax-logon-types.html 登录类型

我尝试过的事情

除非另有说明,这些操作无效并且已被恢复。

相关内容