Wix自定义操作未运行

时间:2014-09-17 16:14:02

标签: wix

我是Wix的新手。我使用版本3.9来运行自定义操作。我能够复制文件并安装和卸载,但我试图让自定义操作运行,没有运气。

下面是一个小例子,ComponentGroup位于另一个由heat创建的文件中。我使用日志记录运行安装程序,并在日志文件中看不到有关安装失败的操作,当我运行卸载时,我看到cmd提示打开。

我也对Wix条件及其评估方式感到困惑。从各种来源,这是我看到的条件和它

  • 如果已将属性设置为包含0或false
  • 的任何值,则MyProperty将返回true
  • NOT MyProperty返回true,属性尚未设置

在条件中使用时,如果MyProperty为false,则不是MyProperty将返回false。并且,如果MyProperty为真,则在某种情况下MyProperty将返回false。这让我感到困惑,卸载过程中自定义操作会让我感到困惑。

任何帮助都将不胜感激。

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
     xmlns:bal="http://schemas.microsoft.com/wix/BalExtension" >
  <Product Id="*" Name="GtLite" Language="1033" Version="1.0.0.0" Manufacturer="Acme" UpgradeCode="0cd4e6db-ec32-42b4-bcb8-1f51f37c7b44">
    <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />

    <!-- Specify minimal UI -->
    <UIRef Id="WixUI_Minimal" />

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

    <!-- Features to install -->
    <Feature Id="ProductFeature" Title="FunTimes" Level="1">

      <ComponentGroupRef Id="BinFilesGroup" />
    </Feature>

    <CustomAction Id="RunDataUtility"
                  Directory="FUN_FOLDER" ExeCommand="cmd.exe /k &quot;echo hello > [FUN_FOLDER]echo_test.txt&quot;" Execute="immediate" Return='asyncNoWait' />


    <InstallExecuteSequence>

      <Custom Action="RunDataUtility" After="InstallFiles" >NOT INSTALLED</Custom>
    </InstallExecuteSequence>


    <Directory Id="TARGETDIR" Name="SourceDir">

      <!-- Define Installation folder under Program Data -->

      <Directory Id="ProgramFolder">
        <Directory Id="INSTALL_FOLDER" Name="Acme" >
          <Directory Id="FUN_FOLDER" Name="FunTimes" >
          </Directory>
        </Directory>
      </Directory>
    </Directory>

  </Product>

</Wix>

1 个答案:

答案 0 :(得分:1)

您是否通过命令行传递BIN_FOLDER?我问,因为我无法看到被设置在这里。 虽然我没有测试过这个命令,但我猜这应该可行。请试一试,让我知道。

<CustomAction Id="ConfigureApp_Cmd" Property="ConfigureApp" Execute="immediate"
    Value="&quot;cmd.exe /k&quot; &quot;echo hello > [BIN_FOLDER]echo_test.txt&quot; nopause;" />
<CustomAction Id="ConfigureApp" BinaryKey="WixCA" DllEntry="CAQuietExec" Execute="deferred" Return="asyncNoWait" Impersonate="no"/>

<InstallExecuteSequence>
    <Custom Action="ConfigureApp_Cmd" After="StartServices"><![CDATA[NOT(Installed)]]></Custom>
    <Custom Action="ConfigureApp" After="ConfigureApp_Cmd"><![CDATA[NOT(Installed)]]></Custom>
</InstallExecuteSequence>

您可能必须传递类似于BIN_FOLDER = C:\ Acme \ bin的内容才能使其正常工作。