WiX: InstallService условно, но файл установки безусловно

В наборе инструментов Windows Install XML, для установки сервиса мы группируемся <ServiceInstall> с a <File> в a <Component>. Для условной установки сервиса мы помещаем <Condition> под <Component>. Однако, если условие будет ложью, то файл не будет установлен также. Если я поместил <File> в безусловном <Component>, затем сервис не имеет никакого пути исполняемого файла, и таким образом установка перестанет работать. Если я поместил <File> в обоих <Component>, дублирующиеся символы будут найдены.

Вопрос, мы можем установить сервис условно, но установить связанный исполняемый файл безусловно?

Спасибо!

12
задан Crend King 13 August 2010 в 11:33
поделиться

2 ответа

Создайте два компонента с разными идентификаторами GUID и идентификаторами и взаимоисключающими условиями: один для файла и службы, а другой - только для файла. Примерно так:

<Component Id="SvcComp" Guid="{YOUR-GUID}" SharedDllRefCount="yes">
    <Condition> SOME_CONDITION </Condition>
    <File Id="SvcFile" Name="Service.exe" Source="Service.exe" Vital="yes" />
    <ServiceInstall Id="Svc" Name="Service" DisplayName="Service" Description="Service" Type="ownProcess" Start="auto" ErrorControl="normal" Vital="yes" />
    <ServiceControl Id="Svc" Name="Service" Stop="both" Remove="uninstall" Wait="yes" />
</Component>

<Component Id="ExeComp" Guid="{YYOUR-GUID}" SharedDllRefCount="yes" >
    <Condition> NOT SOME_CONDITION </Condition>
    <File Id="ExeFile" Name="Service.exe" Source="Service.exe" Vital="yes" />
</Component>

Вы получите предупреждение LGHT1076, которое может быть подавлено, поскольку условия в компонентах являются взаимоисключающими.

6
ответ дан 2 December 2019 в 22:37
поделиться

Я шел по этому пути, и он усложняется быстрее, чем можно было бы ожидать.

Я считаю, что наличие двух компонентов (несмотря на их взаимоисключающие условные выражения) с одним и тем же ключевым файлом, но разными ресурсами ServiceInstall / Control, является нарушением правила компонента.

Я предлагаю переместить всю бизнес-логику в отдельный компонент DLL и создать два разных компонента EXE. Настройте один как приложение консоли / Windows, а другой как приложение службы. Свяжите компоненты с двумя разными функциями, чтобы конечный пользователь мог решить, каким образом он хочет настроить приложение. Затем пользователь может выполнить операцию изменения в добавлении / удалении программ и использовать MSI, чтобы изменить свое мнение позже.

1
ответ дан 2 December 2019 в 22:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: