如何检查是否安装了 CAPICOM?

How to check if CAPICOM is installed?

我的应用程序使用 CAPICOM。有的机器可能没有安装,需要安装者安装。我已经在安装我的应用程序时将 msi 安装程序添加到 运行。

是否有任何方法可以在 Inno Setup 中测试是否安装了 CAPICOM 以避免冗余安装?

如果您看一下 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 安装状态(或例如版本),我会从提到的脚本中获得灵感,除了我只会尝试初始化一些 CAPICOM COM 对象(存在于所需版本中),假设如果失败,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 参数。