Как распространять утилиту certutil.exe вместе с инсталлятором вашего дистрибутива с целью регистрировать ваши корневые сертификаты для разных платформ (x86 и x64).
Ответ такой - похоже именно эту утилиту certutil.exe не надо тащить с собой в инсталляторе !
Она по-видимому всегда присутствует на всех Windows в каталоге C:\Windows\System32 .
Чтобы зарегистрировать ваш корневой сертификат надо в innosetup указать запрос привилегий администратора:
[Setup]
PrivilegesRequired=admin
Далее кидаем файл сертификата в каталог будущей программы:
[Files]
Source: "D:\ca\root_01.pem.cer"; DestDir: "{app}"; Flags: ignoreversion
Далее запускаем certutil.exe для установки сертификата :
[Run]
Filename: "certutil.exe"; Parameters: "-addstore Root ""{app}\root_01.pem.cer"""; Flags: waituntilterminated runascurrentuser runhidden; StatusMsg:"Установка корневого сертификата..."; AfterInstall: checkRootCert();
Тут надо понимать , что certutil.exe найдется как раз в C:\Windows\System32.
И по окончании еще можно проверить , что сертификат успешно установлен через AfterInstall: checkRootCert() :
[Code]
procedure checkRootCert(app1:String);
var
ResultCode:Integer;
begin
if (Exec(ExpandConstant('certutil.exe') , ExpandConstant('-verify "{app}\root_01.pem.cer"'), '', SW_HIDE, ewWaitUntilTerminated, ResultCode)) then
begin
if (ResultCode = 0) then
begin
//MsgBox('root_01.pem.cer OK ', mbCriticalError, MB_OK);
end
else begin
MsgBox(ExpandConstant('ошибка установки корневого сертификата root_01.pem.cer : "{app}\root_01.pem.cer"') + SysErrorMessage(ResultCode), mbCriticalError, MB_OK);
end;
end
else
MsgBox(ExpandConstant('certutil.exe ошибка установки корневого сертификата : "{app}\root_01.pem.cer"') + SysErrorMessage(ResultCode), mbCriticalError, MB_OK);
end;
end.
Проверено на innosetup 6.2.0 и на Windows 10-32 и Windows-10-64 !