【问题标题】:Installing a certificate as part of a WiX package将证书作为 WiX 包的一部分安装
【发布时间】:2013-01-25 18:14:18
【问题描述】:

作为我们的客户端-服务器软件包的一部分,我们有一个自定义 CA 来颁发证书。我需要能够在每个用户的机器上将我们的 CA 安装为受信任的根 CA。为了实现这一点,我使用了 WiX 的 IIS 管理包中的 Certificate 元素(证书不适用于 IIS,但这符合我们的目的)。最初,我让安装程序将它放在本地机器存储中,但我们必须让我们的安装程序按用户安装以避免需要提升,所以我现在必须将它存储在本地用户存储中。

我已将存储位置更改为currentUser,这可以正常工作,但现在每次运行安装程序时都会提示我安装证书,并且在安装证书时都会收到有关删除和安装证书的警告运行新版本的安装程序进行升级。使用本地机器商店时没有收到此类警告。

有没有办法做到以下任一:

  • 让安装程序仅在证书不存在的情况下安装证书,并且在卸载时将其删除(因此升级不会首先将其删除,消除一个警告,然后不会安装它,因为它已经在那里,消除了其他警告)
  • 让安装程序在不提示用户的情况下执行删除/安装证书操作

【问题讨论】:

    标签: wix wix3.6


    【解决方案1】:

    虽然这不是我所要求的确切解决方案,但我确实找到了适合我的解决方案。

    我在Component 上为我的证书设置了Permanent="true",并为其设置了如下条件:

    <Component Id="MyCert" Permanent="True">
        <Certificate ... />
        <Condition><![CDATA[SKIPCERT <> "YES"]]></Condition>
    </Component>
    

    这对我有用,因为我使用引导程序应用程序进行更新,因此我可以在升级时传递一个名为 SKIPCERT 的自定义变量YES

    Permanent="True" 结合条件意味着证书在卸载(或升级)时不会被删除,并且当我安装更新时它不会尝试再次安装。

    【讨论】:

    • 我在 Windows 7 Ultimate x64bit 上进行了测试,但没有收到这些错误。您在什么操作系统上进行测试? MSI 包是 perUser 还是 perMachine?我在测试中使用了 perUser,并将商店位置设置为 currentUser。
    • 对其他任何人也仅供参考:将组件标记为永久意味着用户永远无法卸载组件包含的任何内容。由于您使用的是刻录引导程序,因此您可以将证书安装移动到单独的 MSI 并在捆绑包中标记为永久。捆绑中标记为永久的 MSI 会自动显示在添加和删除程序中。这样,用户可以根据需要轻松卸载它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-28
    • 1970-01-01
    相关资源
    最近更新 更多