WiX Изменить название товара условно - PullRequest
0 голосов
/ 16 января 2020

У меня большой файл .wxs и требование изменить Имя продукта с Версия MyApp Workstation на Версия MyApp Server при запуске установщика на Windows Серверная операционная система. Я много читал и обнаружил, что мне нужно обратиться к следующему свойству MSI MsiNTProductType , которое возвращает значение 1 для рабочей станции и 2 или 3 для серверных операционных систем.

<?xml version="1.0" encoding="UTF-8"?>
<?define ProductName = "MyApp Workstation version" ?>

<Wix>  
  <Product Name="$(var.ProductName)" ... >
     ...
  </Product>
</Wix>

Если я использую условие, подобное следующему, оно обнаруживает, что я нахожусь в операционной системе рабочей станции (в моем случае Windows 10), но это не то, что я хочу:

<Condition Message="This installer is for Windows Server only!">
      <![CDATA[(MsiNTProductType > 1)]]>
</Condition>

Я попробовал препроцессор переменный подход, но, видимо, он не работает:

<?if MsiNTProductType = 1 ?>
<?define ProductName = "MyApp Workstation version" ?>
<?else ?>
<?define ProductName = "MyApp Server version" ?>
<?endif ?>

Я также безуспешно пытался SetProperty и CustomAction . Я застрял в этом.

Можно ли сделать что-то подобное? Какие изменения я должен сделать, чтобы выполнить это? Я очень новичок в WIX, и я не понимаю, как это должно работать. Спасибо.

ПОСЛЕДНЕЕ РЕДАКТИРОВАНИЕ И РЕШЕНИЕ

После многих дней попыток десятков комбинаций я смог сделать это с помощью следующего кода, который я поместил перед любыми CustomActions которые уже были определены:

<Property Id="ConditionalProductName" Value="MyApp Workstation version" />    
<SetProperty Id="ConditionalProductName" Before="LaunchConditions" Value="MyApp Server version" >
   <![CDATA[(MsiNTProductType > 1)]]>
</SetProperty>
<SetProperty Id ="ProductName" Before ="LaunchConditions" Value ="[ConditionalProductName]"/>

Я надеюсь, что это может помочь и другим. Удачи.

1 Ответ

1 голос
/ 16 января 2020

Свойство ProductName может быть изменено только до начала установки. После запуска MSI он становится неизменным.

Операторы препроцессора, которые вы пытаетесь, влияют на время сборки, а не на время установки.

Единственный способ сделать то, что вы хотите, - создать преобразование с другим именем, а затем использовать загрузчик для установки MSI. без преобразования в несерверной ОС и установки MSI с преобразованием в серверной ОС.

Лично это не типичная практика, поэтому я бы вернул требование * PM8. Единственная причина, по которой я бы go приложил усилия, заключалась в том, что бизнес действительно дифференцировал брендинг на стороне маркетинга. В противном случае это просто обычно не делается.

...