Signtool能够很好地签署所有传递的程序集,但是当它尝试对它们加时间戳时,它会失败,错误代码为255.
这也会导致事件查看器出错:
错误应用程序名称:signtool.exe,版本:10.0.10586.212,时间戳:0x56fa257d 错误模块名称:ntdll.dll,版本:6.3.9600.17415,时间戳:0x54504b0d
异常代码:0xc0000374
故障偏移:0x000e5be4
错误进程ID:0x768
错误申请开始时间:0x01d3061e0a3c7af5
错误应用程序路径:C:\ Program Files(x86)\ Microsoft SDKs \ ClickOnce \ SignTool \ signtool.exe
错误模块路径:C:\ Windows \ SYSTEM32 \ ntdll.dll
我的时间戳的msbuild任务如下:
<Exec Command='"$(SDK40ToolsPath)..\..\..\..\ClickOnce\SignTool\SignTool.exe" timestamp /t http://timestamp.verisign.com/scripts/timstamp.dll "%(SignableFiles.FullPath)"' />
我可以直接从命令行运行signtool时产生错误,但是以管理员身份运行cmd可以解决该问题。向用户(运行TeamCity Build代理服务的同一用户)添加权限后,允许我成功执行signtool时间戳而不提升。
为了接近再现,我尝试模拟我的msbuild文件来运行signtool,但这也成功了。
TeamCity似乎使用了MSBuildBootstrapper,但是我无法找出从中调用自定义构建脚本的正确语法。还有其他人遇到过这个问题吗?