c ++和WiX:无声接受.pfx证书

时间:2012-07-18 05:16:19

标签: c++ wix certificate

这样的问题:我需要在我的安装中导入.pfx证书(WiX 3.5)。我需要接受导入它们而不需要任何(!)用户交互,甚至是接受(需要在构建服务器和测试makets时进行测试)

使用WiXIISExtension尝试了标准WiX解决方案,但没有安静(无声)导入选项。

在C ++上尝试过这样的解决方案(wix中来自dll的延迟自定义操作):

  1. PfxImportCertStore - CertEnumCertificatesStore - CertAddCertificateContextToStore: 证书经理要求接受......

  2. 带有标记CryptUIWizImport
  3. CRYPTUI_WIZ_NO_UI:CryptoAPI尝试访问私钥,经理要求接受...

  4. 有什么方法可以解决这个问题吗?或者我真的需要为接受写一个自定义服务?!这不是很酷......

2 个答案:

答案 0 :(得分:1)

好吧,我解决了我的问题。在我的情况下,它只是用户保护证书的标志......只是我的假...但是,在这两天我意识到:

  • 小心使用导入sertificate的方法......当你需要使用从文件或上下文导入时,你应该知道不同的情况......

  • 注意你使用过的旗帜(如果你使用一些例子的话就越多)

  • 请确保您的证书有批准...

P.S。如果有人需要导入不同证书的工作代码的好例子,请评论我

答案 1 :(得分:-1)

尝试在根信任位置添加自签名证书时遇到相同的问题。它提示我安全警告。

Security Warning

使用以下代码,我现在可以在根信任位置中静默添加自签名证书。

    HCERTSTORE hUIRootCertStore = CertOpenStore(CERT_STORE_PROV_SYSTEM, 0, NULL, CERT_SYSTEM_STORE_LOCAL_MACHINE, L"Root");
CRYPTUI_WIZ_IMPORT_SRC_INFO importSrc;
memset(&importSrc, 0, sizeof(CRYPTUI_WIZ_IMPORT_SRC_INFO));
importSrc.dwSize = sizeof(CRYPTUI_WIZ_IMPORT_SRC_INFO);
importSrc.dwSubjectChoice = CRYPTUI_WIZ_IMPORT_SUBJECT_FILE;
importSrc.pwszFileName = L"<certificate file>";
importSrc.pwszPassword = L"<your password>";
importSrc.dwFlags = CRYPT_EXPORTABLE;
bRet = CryptUIWizImport(CRYPTUI_WIZ_NO_UI | CRYPTUI_WIZ_IMPORT_TO_LOCALMACHINE, NULL, NULL, &importSrc, hUIRootCertStore);

如果还有其他方法,请告诉我。