Событие сборки Visua studio и сигнтоол microsoft - PullRequest
0 голосов
/ 27 мая 2020

У меня есть проект 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 в случае успеха во второй (а может и позже) попытке подписи ??

спасибо,

...