У меня большой файл .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]"/>
Я надеюсь, что это может помочь и другим. Удачи.