Installation WIX服务控制条件

Installation WIX服务控制条件,installation,wix,wix3.5,Installation,Wix,Wix3.5,如果正在安装数据库功能,则我的属性设置为1: <Property Id="DBFLAG" Value="0" /> <CustomAction Id="DbCheck" Return="check" Execute="immediate" Property="DBFLAG" Value="1" /> <InstallExecuteSequence> <Custom Action="DbCheck" After="CostFinalize"

如果正在安装数据库功能,则我的属性设置为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>

DBFLAG=1
DBFLAG=0
但是,如果安装了数据库功能,它总是运行cmp_SvcC而不是cmp_SvcC_启动服务。我检查了日志,可以看到在运行cmp_SvcC和cmp_SvcC_Start之前,DBFLAG被设置为1,但即使条件仅在DBFLAG=0时,cmp_SvcC仍然运行

如果我将DBFLAG的初始值更改为1,那么cmp_SvcC_Start将运行


有人知道为什么会发生这种情况吗?

这样不行。即使您是通过属性间接执行功能动作,也不能使用功能动作来调节零部件


正确的方法是在影响组件安装的所有功能之间共享组件。这是通过。

另一种方法是在StartServices自定义操作本身上设置一个条件。像这样:

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


为了获得您想要使用的序列号的线索,请使用Orca打开msi,查看InstallExecuteSequence表,并按照序列号对该表进行排序。

您能对此进行一点扩展吗?我是wix的新手,不太清楚你的意思。我是否将cmp_SvcC和cmp_SvcC_Start添加到db功能中?WiX不支持编辑FeatureComponents表。解决方案是使用Orca手动修改生成的MSI:。另一个解决方案是找到一个安装创作工具,允许您修改此表。干杯,在知道这一点后,我必须从代码开始,因为构建过程需要自动化,之后无法编辑msi…@Cosmin,事实并非如此:WiX支持Feature/FeatureRef下带有Component/ComponentRef/ComponentGroupRef的FeatureComponents表@knappster,请参阅和,以了解您的原始技术不起作用的原因。@BobArnson我们无法更新FeatureComponents表。原因是两列都是主键。我们只需要删除并创建新行ref:还要注意,您不必设置
序列
编号-MSI/WIX将默认设置一个,通常为5900。