2009-12-24 2 views
9

Пожалуйста, можете ли вы предоставить мне фрагмент WiX или решение для упомянутого сценария. Мне нужно включить pfx-файл в WiX msi, и пользователь загрузит мой msi на свой компьютер через Internet Explorer и нажмите «Установить», и мне также понадобится сертификат, который будет установлен на его машине.Установите сертификат pfx в хранилище пользователей в Windows с помощью WiX

ответ

9

Вам нужен Certificate element. Он является частью расширения IIS для wix, но также может использоваться для установок, не связанных с IIS.

Вы должны

  1. объявить префикс пространства имен IIS, для например, как это в корне Wix элемента:

    <Wix xmlns='http://schemas.microsoft.com/wix/2006/wi' 
        xmlns:iis='http://schemas.microsoft.com/wix/IIsExtension'> 
    
  2. Встроить PFX-файл в виде двоичного потока в вашем установочном пакете. Добавить в Binary элемент под элементом продукта, как это:

    <Binary Id="MyCertificateBinaryStream" 
        SourceFile="c:/path/to/mycertificate.pfx" /> 
    
  3. Объявите компонент с <iis:Certificate> элемента, например, как это. Посмотрите на documentation, вам нужно заполнить некоторые дополнительных атрибутов. Обратите внимание, что вам не нужен CertficatePath, если вы используете атрибут BinaryKey.

    <Component Id="MyCertificateComponent" Guid="MY-GUID-HERE"> 
        <iis:Certificate Id="MyCertificate" 
         BinaryKey="MyCertificateBinaryStream" 
         ... some more attributes ...     
        /> 
    </Component> 
    
  4. Включить расширение IIS, добавив опцию вариант -ext WixIISExtension при вызове WIX инструментов командной строки. Если вы используете визуальную студию, это просто вопрос добавления ссылки в ваш проект wix к WixIISExtension.

+0

Я рассмотрю этот ответ и попробую. Спасибо за ваш ответ еще раз. В целом оцените ваше объяснение. Веселого Рождества! – abmv

4

Чтобы расширить ответ немного, следующий набор атрибутов работал для меня:

<iis:Certificate 
    Id="My.Certificate" 
    StoreName="root" 
    Overwrite="yes" 
    Name="My Friendly Certificate Name" 
    Request="no" 
    BinaryKey="MyCertificate.Binary" 
    StoreLocation="localMachine" /> 

Где <Product> элемент содержал <Binary> ребенка следующим образом:

<Binary 
    Id="MyCertificate.Binary" 
    SourceFile="$(var.ProjectDir)MyCertificate.pfx" /> 

(Я включил файл PFX в мой проект WiX).