2016-12-08 7 views
0

Я борюсь с предложениями WIX и стоимостью. Я создаю службу скелетных окон и имею код в установщике, чтобы правильно объединить файлы и развернуть службу Windows, передать аргументы командной строки и т. Д.WIX Installer использует текст пользователя для указания имени продукта/параметров командной строки

Однако служба не имеет оперативной логики, развернутой в коде - его все вытащили во время выполнения из WS, в котором хранится информация о конфигурации. Мне нужно сообщить службе Windows (во время установки), какое имя конфигурации использовать.

Мне также нужно установить службу, чтобы она отличалась от всех остальных, учитывая это имя конфигурации. В коробке могут быть установлены n экземпляров этой вещи; каждая услуга вытягивается из другой конфигурации.

Вкратце: мне нужно установить свойство (и имя продукта) динамически на основе ввода пользователя.

Вот что я пытаюсь не зная, как поступить на получение значения «Config», установленный пользователем:

<!-- //todo: define this by user input??--> 
<?define Config = "DefaultConfigName" ?> 

<Product Id="*" Name="$(var.Config)" Language="1033" Version="1.0.0.0" UpgradeCode="{someGUID}"> 
    <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" /> 

<Property Id="WIXUI_INSTALLDIR" Value="INSTALLFOLDER" /> 

<MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." /> 
<MediaTemplate EmbedCab="yes" /> 

<Feature Id="ProductFeature" Title="$(var.Config)" Level="1"> 
    <ComponentGroupRef Id="ProductComponents" /> 
</Feature> 
</Product> 

Мысли?

ответ

1

Во-первых, помните, что объект <?define ... ?> создает переменную времени компиляции. то есть значение будет скомпилировано в ваш .msi, оно не будет изменяться во время установки.

Во-вторых, я уверен, что единственный способ изменить название продукта уже построенного .msi будет использовать преобразование.

Оба вышеуказанных пункта означают, что вам нужно знать все возможные значения Config при создании вашего установщика, а также создавать несколько .msis или создавать один .msi и несколько преобразований .mst.

Я подозреваю, что это не то, что вы хотите. Вместо этого рассмотрите определение общедоступной защищенной собственности. Это свойство может быть передано в .msi в командной строке или задано с загрузчика или интерфейса MSI. Затем вы можете использовать это свойство в атрибутах элемента ServiceInstall, используя обычный синтаксис [CONFIG]. Преимущество такого подхода заключается в том, что вам не нужно знать все возможные значения Config при построении.

+0

Извините за медленный ответ - этот способ очень полезен. Я понятия не имел, что определение было только временем компиляции, и что свойства были разными, чем константы, определяемые временем компиляции. Благодарю. – Noah

+0

Хорошо, я в конце концов решил определить переменную через командную строку при компиляции msi. Передача -dConfig = «ConfigName» на свечу при создании установщика работала для того, что нам было нужно, и было менее сложным, чем другие параметры. – Noah