我在通过WiX安装受密码保护的PFX证书时遇到了一些麻烦。
我正在使用WiX 3.5.2519.0。
我包含一个PFX文件,如下所示:
<Binary Id="My.Binary"
SourceFile="$(var.ProjectDir)MyProject$(var.ConfigSuffix).pfx" />
$(var.ConfigSuffix)的值因解决方案配置而异(例如“(Debug)”,“(Stage)”)。对于“Release”,它被设置为空字符串。
我有各种解决方案配置,除了一个使用非密码保护的PFX证书外,“Release”使用受密码保护的PFX。我通过在“Release”配置中有条件地定义$(var.PfxPassword),然后按如下方式安装证书来解决这个问题:
<?ifdef $(var.PfxPassword) ?>
<iis:Certificate
Id="My.Certificate"
StoreName="root"
Overwrite="yes"
Name="My Web Site$(var.ConfigSuffix)"
Request="no"
BinaryKey="MyCertificate.Binary"
StoreLocation="localMachine"
PFXPassword="$(var.PfxPassword)" />
<?else?>
<iis:Certificate
Id="My.Certificate"
StoreName="root"
Overwrite="yes"
Name="My Web Site$(var.ConfigSuffix)"
Request="no"
BinaryKey="MyCertificate.Binary"
StoreLocation="localMachine" />
<?endif?>
我也尝试将“$(var.PfxPassword)”替换为“[PFXPASSWORD]”(已在其他地方定义),以及纯文本中的实际密码。在任何情况下,安装都会失败,并显示以下日志片段:
Action start 12:29:02: InstallCertificates.
InstallCertificates: Error 0x80070056: Failed to open PFX file.
InstallCertificates: Error 0x80070056: Failed to get SHA1 hash of certificate.
InstallCertificates: Error 0x80070056: Failed to resolve certificate: LinnRecords.Certificate
CustomAction InstallCertificates returned actual error code 1603 (note this may not be 100% accurate if translation happened inside sandbox)
Action ended 12:29:02: InstallCertificates. Return value 3.
我认为错误0x80070056表示密码不正确,但我使用PowerShell中的Get-PfxCertificate来验证我使用的密码是否正确。
对于PFX文件不使用密码的所有配置,安装都可以正常运行。