У меня есть проект Visual Studio C ++, который построен в среде Team City. В событии пост-сборки я вызываю сценарий для подписи двоичного файла с помощью microsoft signtool.exe, сценарий выглядит следующим образом:
@echo off
SET SIGN_ATTEMPTS=0
SET MAX_SIGN_ATTEMPTS=60
SET SIGN_TOOL="C:\Program Files\Microsoft SDKs\Windows\v7.1A\Bin\signtool.exe"
if %1=="" goto done
if [%SIGN_TOOL%]==[] (
echo "signtool is not specified, then do not sign %1"
goto done
)
::Try to verify the signature first
cmd /c %SIGN_TOOL% verify /pa /q %1
IF %ERRORLEVEL%==0 goto done
:normalsign
cmd /c %SIGN_TOOL% sign /fd SHA256 /a /t http://timestamp.verisign.com/scripts/timestamp.dll /v %1
IF NOT %ERRORLEVEL%==0 (
ECHO last errror: %ERRORLEVEL%
SET /a SIGN_ATTEMPTS+=1
IF NOT %SIGN_ATTEMPTS%==%MAX_SIGN_ATTEMPTS% (
ECHO Failed to sign %1 at %SIGN_ATTEMPTS% attempts
ping 1.1.1.1 -n 1 -w 2000 > NUL
GOTO normalsign
) ELSE (
ECHO Give up after %MAX_SIGN_ATTEMPTS% attempts
GOTO failed
)
) ELSE (
GOTO done
)
:done
ECHO Succesfully signed %1
ECHO last error is %ERRORLEVEL%
EXIT 0
:failed
ECHO Failed signning %1 with last error: %ERRORLEVEL%
EXIT 10
как в приведенном выше logi c, иногда он не удался при первом вызове в SIGN_TOOL, с ошибкой: EXEC error information: "SignerTimeStamp() failed." (-2147012894/0x80072ee2)
, но после второй попытки он подписался успешно, затем сценарий завершился. Но после успеха во втором испытании Visual Studio по-прежнему считала это неудачей, и моя сборка проекта завершилась ошибкой.
Я пытаюсь поставить EXIT 0
для успешных случаев, но Team City все еще сообщает об ошибке: :VCEnd" exited with code -1.
Не могли бы вы объяснить мне, почему? И как я могу добиться успеха сборки VS в случае успеха во второй (а может и позже) попытке подписи ??
спасибо,