Важная недостающая часть ответа с указанием signtool:
Да, с помощью хорошо известного signtool.exe вы также можете узнать, подписан ли файл. Не нужно скачивать другой инструмент!
например. с простой линией:
signtool verify /pa myfile.exe
if %ERRORLEVEL% GEQ 1 echo This file is not signed.
(Для подробного вывода добавьте «/ v» после «/pa» .)
Кто-то может спросить: почему это важно? Я просто подписываю файлы (снова), которые должны быть подписаны, и это работает.
Моя цель - сохранить сборки в чистоте и не подписывать файлы во второй раз, потому что не только изменяется дата, но и после нее происходит двоичное различие.
Бизнес пример:
Мой клиент имеет оптимизированный автоматизированный процесс разработки и пост-сборки. Существует несколько источников для разных наборов файлов, и в конце все собирается, тестируется и связывается с дистрибутивом - для этого некоторые файлы должны быть подписаны. Чтобы гарантировать, что некоторые файлы не покидают устройство без подписи, мы подписывали все важные файлы, даже если они уже подписаны.
Но это недостаточно чисто:
1) Если мы снова подпишем файл, который уже подписан, дата файла и двоичный отпечаток изменится, и файл потеряет сопоставимость с его источниками, если он был просто скопирован.
(По крайней мере, если вы подпишете отметку времени, что мы всегда делаем, и я думаю, что это настоятельно рекомендуется.)
Это серьезная потеря качества, поскольку этот файл больше не сопоставим с его предшественниками из другого источника.
2) Если мы снова подпишем файл, это также может быть ошибкой, и это файл стороннего производителя, который не должен быть подписан вашим подразделением.
Вы можете избежать того и другого, сделав саму подпись условной в зависимости от кода возврата предыдущего упомянутого вызова signtool verify.