2

我正在使用 WiX 3.10 制作安装程序。我最初的任务是将 Postgres 文件复制到目标系统,初始化集群,注册服务,启动它并在安装时恢复数据库,以及反向 - 停止服务,将其从系统中删除,并清除集群数据。我编写了两个 bat 文件,并添加了执行它们的自定义操作以及在各个地方描述的一些条件,但它们都不起作用。我尝试过使用和不使用 CDATA、Installed、INSTALLED 和其他一些变体,但它总是执行这两个操作。

这是我现在正在试验的 wix 文件。

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <Product Id="*" Name="Hatred_6" Language="1033" Version="1.0.0.0" Manufacturer="Satan" UpgradeCode="d9602b10-8428-4031-8c82-99288b21377f">
        <Package InstallerVersion="405" Compressed="yes" InstallScope="perMachine"  InstallPrivileges="elevated"/>

        <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
        <MediaTemplate EmbedCab="yes" />

        <CustomAction Id="AAction" Directory="INSTALLFOLDER" Execute="deferred" Impersonate="no" Return="check"
                      ExeCommand="cmd.exe /c &quot;a.bat&quot;">NOT Installed</CustomAction>

        <CustomAction Id="BAction" Directory="INSTALLFOLDER" Execute="deferred" Impersonate="no" Return="check"
                      ExeCommand="cmd.exe /c &quot;b.bat&quot;">Installed</CustomAction>

        <InstallExecuteSequence>
            <Custom Action="BAction" After="InstallFiles" />
            <Custom Action="AAction" After="InstallFiles" />
        </InstallExecuteSequence>

        <Feature Id="ProductFeature" Title="Hatred_6" Level="1">
            <ComponentGroupRef Id="ProductComponents" />
        </Feature>
    </Product>

    <Fragment>
        <Directory Id="TARGETDIR" Name="SourceDir">
            <Directory Id="ProgramFilesFolder">
                <Directory Id="INSTALLFOLDER" Name="Hatred_6" />
            </Directory>
        </Directory>
    </Fragment>

    <Fragment>
        <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
            <Component Id="CalcComponent" Guid="515C0606-FD73-4B5D-ACF4-481123092A3E">
                <File Id="CalcFile" KeyPath="yes" Source="calc.exe" />
            </Component>
            <Component Id="AComponent" Guid="515e3aa0-e5a0-4cd1-aaa5-ebf25a679a24">
                <File Id="AFile" KeyPath="yes" Source="a.bat" />
            </Component>
            <Component Id="BComponent" Guid="85f7627e-fc39-4f78-a870-221d2d08375d">
                <File Id="BFile" KeyPath="yes" Source="b.bat" />
            </Component>
        </ComponentGroup>
    </Fragment>
</Wix>

bat 文件包含 dir > a.txt 和 dir > b.txt 所以我可以查看它们是否实际执行。这有点令人沮丧,我是不是误会了什么?

4

1 回答 1

8

条件应放​​在Custom元素内,而不是CustomAction. 此外,您在卸载期间没有InstallFiles操作。请改用RemoveFiles

<CustomAction Id="AAction" Directory="INSTALLFOLDER" Execute="deferred" 
              Impersonate="no" Return="check" ExeCommand="cmd.exe /c &quot;a.bat&quot;" />
<CustomAction Id="BAction" Directory="INSTALLFOLDER" Execute="deferred"
              Impersonate="no" Return="check" ExeCommand="cmd.exe /c &quot;b.bat&quot;" />

<InstallExecuteSequence>
    <Custom Action="AAction" After="InstallFiles">NOT Installed</Custom>
    <Custom Action="BAction" Before="RemoveFiles">Installed</Custom>
</InstallExecuteSequence>
于 2016-09-12T06:08:50.190 回答