Как проверить, установлен ли CAPICOM? - PullRequest
2 голосов
/ 01 ноября 2019

Мое приложение использует CAPICOM. Возможно, он не установлен на некоторых компьютерах, поэтому установщик должен установить его. Я уже добавил установщики msi для запуска при установке моего приложения.

Есть ли способ проверить в Inno Setup, установлен ли CAPICOM, чтобы избежать избыточной установки?

1 Ответ

4 голосов
/ 02 ноября 2019

Если вы посмотрите на примеры распространения CAPICOM SDK, в частности \Samples\vbs\CVersion.vbs, вы увидите пробный способ проверки возможности определения номера версии библиотеки. В начале этого сценария автор пытается инициализировать объект CAPICOM.Store и открывает хранилище корневых сертификатов (для последующего использования):

' Open the machine Root store, since it is safe to assume it always has some certs in it.
Set oStore = CreateObject("CAPICOM.Store")
oStore.Open CAPICOM_LOCAL_MACHINE_STORE, "Root", CAPICOM_STORE_OPEN_READ_ONLY
If Err.Number <> 0 Then
    GetCAPICOMVersion = CAPICOM_NOT_INSTALLED
    Exit Function
End If

, поскольку нет единой функции API, которая бы сообщала о состоянии установки CAPICOM (или, например, версия), я бы черпал вдохновение из упомянутого скрипта, за исключением того, что я бы только попытался инициализировать некоторые из COM-объектов CAPICOM (существующих в нужной версии), предполагая, что в случае сбоя CAPICOM не установлен:

[Code]
function IsCapiComInstalled: Boolean;
begin
  Result := True;
  try
    CreateOleObject('CAPICOM.Store'); { try to initialize CAPICOM.Store object }
  except
    Result := False; { if that fails, CAPICOM is not installed }
  end;
end;

Такую вспомогательную функцию вы можете затем использовать для параметра Check в выбранном вами разделе секции скрипта.

...