WIX ServiceControl Условие - PullRequest
       40

WIX ServiceControl Условие

2 голосов
/ 22 июня 2011

У меня есть свойство, которое установлено в 1, если функция базы данных устанавливается:

<Property Id="DBFLAG" Value="0" />
<CustomAction Id="DbCheck" Return="check" Execute="immediate" Property="DBFLAG" Value="1" />
<InstallExecuteSequence>
        <Custom Action="DbCheck" After="CostFinalize"><![CDATA[&ft_db=3]]></Custom>
</InstallExecuteSequence>

В другой функции я проверяю этот DBFLAG, чтобы увидеть, является ли он 0 или 1, и на основании этого я хочуЧтобы запустить службу немедленно или нет:

<Component Id="cmp_Svc" Guid="99481212-F2E0-4B6E-934D-0994815C31ED">
            <File Id="FILE01" Source="$(var.Service.TargetDir)\Service.exe" KeyPath="yes" />

            <ServiceInstall Id="Svc" Name="My Service" Type="ownProcess" Account="[WIX_ACCOUNT_LOCALSYSTEM]" Description="My Service." DisplayName="My Service" ErrorControl="normal" Interactive="no" Start="auto" Vital="no" />
</Component>
<Component Id="cmp_SvcC_Start" Guid="2ED5DBC7-BD42-4D46-AB18-E82DB0E317AD">
            <Condition>DBFLAG=1</Condition>
            <ServiceControl Id="SvcC_Start" Name="My Service"  Remove="uninstall" Stop="both" Wait="yes" Start="install" />
</Component>

<Component Id="cmp_SvcC" Guid="5769A35B-FD61-45D4-8113-40FB762B79C6">
            <Condition>DBFLAG=0</Condition>
            <ServiceControl Id="SvcC" Name="My Service"  Remove="uninstall" Stop="both" Wait="yes" />
</Component>

Тем не менее, она всегда запускает службу cmp_SvcC вместо службы cmp_SvcC_Start, если установлена ​​функция базы данных.Я проверил журналы и вижу, что DBFLAG установлен в 1 перед запуском cmp_SvcC и cmp_SvcC_Start, но все еще выполняется cmp_SvcC, даже если условие выполняется только при DBFLAG = 0.

Если я изменяю исходноезначение DBFLAG равно 1, после чего запускается cmp_SvcC_Start.

Кто-нибудь знает, почему это происходит?

Ответы [ 2 ]

2 голосов
/ 01 октября 2013

Другим способом является условие для самого настраиваемого действия StartServices. Как это:

<InstallExecuteSequence>
<StartServices Sequence="5900">
    <![CDATA[VersionNT AND DBFLAG="1"]]>
</StartServices>
</InstallExecuteSequence>

Чтобы понять, какой порядковый номер вы хотите использовать, откройте MSI-файл с Orca, посмотрите таблицу InstallExecuteSequence и отсортируйте таблицу по порядковому номеру.

2 голосов
/ 22 июня 2011

Так не работает. Вы не можете обусловить действие компонента функцией, даже если вы делаете это косвенно через свойство.

Правильный подход - разделить ваш компонент между всеми функциями, которые влияют на его установку. Это делается с помощью таблицы FeatureComponents .

...