Вопрос по – Установка поля UAC 'Publisher' для установщика NSIS

16

Когда я открываю свой установщик (созданный с помощью NSIS), появляется диалоговое окно UAC с информацией о моем установщике. ПолеPublisher является «неизвестным». Я слышал о цифровой подписи приложения, знаете ли вы, как это сделать в NSIS?

How can I set the field/attribute Publisher to "My Installer" or some other text?

Я думаю, что следующий код должен установитьPublisher поле, но оно не ", оно все еще остается" неизвестным ":

<code>InstallDir  "abc"
Name        "def"        
OutFile     "def.exe"

VIProductVersion                 "1.0.0.0"
VIAddVersionKey ProductName      "def"
VIAddVersionKey Comments         "MY DESCRIPTION"
VIAddVersionKey CompanyName      "My Installer"
VIAddVersionKey LegalCopyright   "MY COMPANYNAME"
VIAddVersionKey FileDescription  "MY DESCRIPTION"
VIAddVersionKey FileVersion      1
VIAddVersionKey ProductVersion   1
VIAddVersionKey InternalName     "def"
VIAddVersionKey LegalTrademarks  "PTY LTD"
VIAddVersionKey OriginalFilename "def.exe"

Section
    DetailPrint "Hello World"
SectionEnd
</code>
Важно то, что «издатель» поле там сделано цифровой подписью, с издателем, являющимся тем из подписи. Это значит, что для начала нужно купить подпись. Chris Morgan
Если вы не хотите играть с неизданной версией NSIS от svn, вы не сможете легко ее изменить. Увидетьstackoverflow.com/questions/4244497/… Seki

Ваш Ответ

2   ответа
2

это строки, которые я использовал с версией NSIS 3.03 с!finalize команда.

Important:  Вам нужно будет предоставить пароль сертификата кодировки внутриpasswd.txt файл находится в том же каталоге, что и вашcertificate.pfx файл.

!define PRODUCT_NAME "def"
!define PRODUCT_VERSION "1.0.0.0"
!define OutputFileName "def.exe"

Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
OutFile "${OutputFileName}"
InstallDir "abc"
ShowInstDetails show

!define /file OutFileSignPassword ".\CodeSign\passwd.txt"
!define OutFileSignCertificate ".\CodeSign\certificate.pfx"
!define OutFileSignSHA1   ".\CodeSign\signtool.exe sign /f ${OutFileSignCertificate} /p ${OutFileSignPassword} /fd sha1   /t  http://timestamp.comodoca.com /v" 
!define OutFileSignSHA256 ".\CodeSign\signtool.exe sign /f ${OutFileSignCertificate} /p ${OutFileSignPassword} /fd sha256 /tr http://timestamp.comodoca.com?td=sha256 /td sha256 /as /v" 

!finalize "PING -n 1 127.0.0.1 >nul"                                # Delay Next Step to ensure File isn't locked by previous Process 
!finalize "${OutFileSignSHA1} .\${OutputFileName}"                  # CodeSigning with SHA1/AuthentiCode 
!finalize "PING -n 5 127.0.0.1 >nul"                                # Delay Next Step to ensure File isn't locked by previous Process 
!finalize "${OutFileSignSHA256} .\${OutputFileName}"                # CodeSigning with SHA256/RFC 3161  

CRCCheck on

Section
    DetailPrint "Hello World"
SectionEnd

После этого вы сможете увидеть вывод, похожий на эти строки:

The following certificate was selected:
    Issued to: Your Company
    Issued by: COMODO RSA Code Signing CA
    Expires:   Sun Mar 15 00:59:59 2020
    SHA1 hash: 0A12223C465069798D940317273C4F56A9BCC6D9

Done Adding Additional Store
Successfully signed: .\def.exe

Number of files successfully Signed: 1

Number of warnings: 0

Number of errors: 0
19

Authenticode знак установщик с центром сертификации, которому доверяет Windows (если вы хотите быть частьюWinqual тогда вам нужен специальный сертификат, а MS позволяет использовать толькоVeriSign) потому что это поле извлекается из цифрового сертификата (если таковой существует), а не из информации о версии PE.

Чтобы подписать как часть процесса сборки, вы можете использовать этомотыгаили, если вы используете форк Unicode, вы можете использовать!finalize команда.

Похожие вопросы