关于wix条件消息的有线问题

时间:2011-02-21 07:22:14

标签: wix

以下是我的代码

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <Product Id="928a18b3-0f75-4b89-844f-a5699a549011" Name="ExperimentNew" Language="1033" Version="1.0.0.0" Manufacturer="Experiment" UpgradeCode="17929f52-f868-4164-96f6-c47b62781041">
        <Package InstallerVersion="200" Compressed="yes" />
    <Media Id="1" Cabinet="media1.cab" EmbedCab="yes" />   
    <Property Id="ODPNETINSTALLED" Value="1"></Property>
    <Directory Id="TARGETDIR" Name="SourceDir">
      <Directory Id="ProgramFilesFolder">
        <Directory Id="INSTALLLOCATION" Name="Experiment">
          <Component Id ="main_test_file" Guid="{914ED802-82EF-4296-85F2-4095DE0AAC1D}" KeyPath="yes">
            <File Id="file1" Source=".\try.bat"></File>
          </Component>
        </Directory>
      </Directory>
    </Directory>
    <Feature Id="ProductFeature" Title="Experiment" Level="1">
      <ComponentRef Id="main_test_file"/>
      <ComponentGroupRef Id="Product.Generated" />
    </Feature>
    <CustomAction Id ="SetProperty" Property="ODPNETINSTALLED" Value="0"></CustomAction>
    <InstallExecuteSequence>
      <Custom Action="SetProperty" Before="LaunchConditions" ></Custom>
    </InstallExecuteSequence>
    <Condition Message="SHOULD NOT APPEAR"><![CDATA[ODPNETINSTALLED="0"]]></Condition>
    <UI>
      <UIRef Id="WixUI_Minimal" />
    </UI>
    </Product>
</Wix>

我想在自定义操作“SetProperty”中更改“ODPNETINSTALLED”的值 所以我希望不会弹出条件消息。但它每次都在安装的第一个开始时显示 - 为什么会这样?

我也做了以下更改:

<Property Id="ODPNETINSTALLED" Value="0"></Property> 
<CustomAction Id  ="SetProperty" Property="ODPNETINSTALLED"  Value="1"></CustomAction>

然后在接受许可协议后显示条件消息。

1 个答案:

答案 0 :(得分:1)

我不确定我是否完全理解您提到的代码,但我怀疑此特定情况下的问题可能与您希望运行的操作序列有关。您可以在{{1}中安排它但是你可能希望它能早点运行。 InstallExecuteSequenceLaunchConditions都安排了InstallUISequence次操作,因此除了最小的UI之外,它首先在InstallUISequence中运行。只要您的行为影响InstallExecuteSequence,我认为您应该这样做。

所以:

    在您的CA定义中
  • 添加LaunchConditions属性
  • 将您的操作安排到Execute="firstSequence"InstallUISequence

旁注:我会更改用于设置属性的逻辑并检测它是否已设置。您可以简单地避免默认设置,而不是将其设置为默认值,然后更改为所需的值。然后让此CA在需要设置时设置ODPNETINSTALLED属性。并且所有检查和条件将验证属性是否已定义,而不是检查特定值。即不是ODPNETINSTALLED,而不是ODPNETINSTALLED&lt;&gt; 1,或者别的什么。

希望这有帮助。