Wix installer: разархивируйте архив, который пользователь выбрал во время установки - PullRequest
0 голосов
/ 05 июня 2018

Имея установщик, который позволяет пользователю выбирать zip-файл с диска, мы хотели бы распаковать этот файл в целевой каталог установки.

Возможно ли это со стандартным набором инструментов / расширений wix?Нужно ли создавать собственное действие?

В настоящее время мы делаем что-то вроде этого CreateObject("Shell.Application"), затем используем его вот так objShell.NameSpace(installDir).CopyHere(objShell.NameSpace(configPath).items), 20

Но я чувствую, что это не очень хороший способ, и к тому же у него также есть проблемы сWindows UAC.


РЕДАКТИРОВАТЬ: мотивация состоит в том, чтобы иметь один установщик MSI и несколько почтовых индексов настройки.Когда клиент устанавливает приложение, он получает MSI и один из почтовых индексов и выбирает почтовый индекс во время установки (или отправляет в качестве параметра в автоматической установке).

Ответы [ 2 ]

0 голосов
/ 19 июня 2018

Конструкции препроцессора : Если вам нужно доставить варианты вашей установки различным клиентам, я хотел бы использовать pre-processor constructs для компиляции MSIдля каждого клиента. Вот очень длинное описание этого подхода (возможно, проверьте фрагменты кода внизу).

Используемые конструкции препроцессора: я приведу код / ​​разметку из приведенного выше связанного ответа с некоторыми изменениями, чтобы, надеюсь, сделать его более понятным (я считаю, что это очень «дружественный к кодеру» подход - это очень знакомая область для разработчиков C ++ вв частности - использовать препроцессорные конструкции, которые являются:)

<?define ClientName = “Apple” ?>

<...>

<!-- You can put your vendor-specific components in an include file  -->
  <?if $(var.ClientName ) = "Apple" ?> 
    <?include "AppleFeatures.wxi" ?>
  <?endif ?>
  <?if $(var.ClientName ) = "Microsoft" ?>
    <?include "MicrosoftFeatures.wxi" ?>
  <?endif ?>

<...>

По существу, препроцессорные конструкции позволяют вам изменять исходный файл WiX на лету перед его компиляцией и связыванием, так что вы можете включить илиисключить определенные разделы по желанию.Вы можете сделать это, установив несколько параметров - например, имя клиента - которые затем можно использовать для вывода определенного имени файла MSI: YourProduct_AppleEdition.msi или YourProduct_SonyEdition.msi и т. Д....

Вот краткое описание различий между переменными локализации , переменными препроцессора и включаемыми файлами : WiX (Windows Installer Xml), создание универсальных переменных .

0 голосов
/ 19 июня 2018

Шаблон, который мне нравится использовать, - создание точки расширения в моей программе установки WiX, которая называется Extension.wxs.Версия этого файла по умолчанию (или standard ) выглядела следующим образом:

<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <Fragment>
        <DirectoryRef Id="INSTALLLOCATION">
            <!-- Setup all of the extension components here. -->
            <!-- For example...
            <Component Id="INSERT_COMPONENT_ID_HERE" Guid="{8451AFA1-5185-468D-B0A0-650494251D8F}">
                <File Id="INSERT_FILE_ID_HERE" KeyPath="yes" Source="SomeExtension.dll" />
            </Component> -->
        </DirectoryRef>             
    </Fragment>
    <Fragment>
        <ComponentGroup Id="ExtensionComponentGroup">
            <!-- Reference components that are extending the standard product here -->
            <!-- <ComponentRef Id="INSERT_COMPONENT_ID_HERE" /> -->            
        </ComponentGroup>
    </Fragment>
</Wix>

Где бы вы ни указали свой Feature для настройки, вы бы добавили ссылку на негоExtensionComponentGroup, вот так:

<Feature Id="MyMainFeature"
         Title="My Main Feature"
         Level="1"
         Description="An awesome feature, needed to run the application.">
  <ComponentGroupRef Id="MyMainComponentGroup" />
  <ComponentGroupRef Id="ExtensionComponentGroup" />
</Feature>

В моем случае я просто использую набор скриптов Powershell для построения моего установщика, потому что это упрощает динамическое определение того, что вводить в CLI WiX Toolset.,Итак, мой стандартный вызов candle.exe будет выглядеть следующим образом:

"C:\Program Files (x86)\WiX Toolset v3.11\bin\candle.exe" -out .\obj .\src\Product.wxs .\src\Extension.wxs

Однако, когда мне нужно настроить установщик с файлами, специфичными для клиента, я просто изменяю командную строку так, чтобы она указывала наНастраиваемый файл Extension.wxs (своего рода «впрыскивание» его в конвейер сборки):

"C:\Program Files (x86)\WiX Toolset v3.11\bin\candle.exe" -out .\obj .\src\Product.wxs .\SomeClientWithSpecialNeeds\Extension.wxs

Настройка этих вызовов командной строки становится намного проще при использовании Powershell, но для этого я опустил сценарии Powershellпростоты.

Итак, я предлагаю вам представить содержимое вашего zip-файла в виде отдельных элементов Component в отдельном файле Extension.wxs, который вы вставляете в конвейер сборки вашего установщика.Эти компоненты хранятся в ComponentGroup, на который ссылается соответствующий Feature.Создав подходящий файл по умолчанию (пустой, без компонентов) Extension.wxs, вы все равно можете выполнить сборку без каких-либо пользовательских компонентов.Другое преимущество использования этого шаблона заключается в том, что все дополнительные компоненты будут удалены во время удаления продукта, и вам не придется писать какие-либо нестандартные пользовательские действия, которые увеличивают накладные расходы на обслуживание вашего установщика!

Надеюсь, это кому-нибудь поможет.

...