这样的问题:我需要在我的安装中导入.pfx证书(WiX 3.5)。我需要接受导入它们而不需要任何(!)用户交互,甚至是接受(需要在构建服务器和测试makets时进行测试)
使用WiXIISExtension
尝试了标准WiX解决方案,但没有安静(无声)导入选项。
在C ++上尝试过这样的解决方案(wix中来自dll的延迟自定义操作):
链PfxImportCertStore - CertEnumCertificatesStore - CertAddCertificateContextToStore
:
证书经理要求接受......
CryptUIWizImport
的 CRYPTUI_WIZ_NO_UI
:CryptoAPI尝试访问私钥,经理要求接受...
有什么方法可以解决这个问题吗?或者我真的需要为接受写一个自定义服务?!这不是很酷......
答案 0 :(得分:1)
好吧,我解决了我的问题。在我的情况下,它只是用户保护证书的标志......只是我的假...但是,在这两天我意识到:
小心使用导入sertificate的方法......当你需要使用从文件或上下文导入时,你应该知道不同的情况......
注意你使用过的旗帜(如果你使用一些例子的话就越多)
请确保您的证书有批准...
P.S。如果有人需要导入不同证书的工作代码的好例子,请评论我
答案 1 :(得分:-1)
尝试在根信任位置添加自签名证书时遇到相同的问题。它提示我安全警告。
使用以下代码,我现在可以在根信任位置中静默添加自签名证书。
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);
如果还有其他方法,请告诉我。