WiX无法检查使用CustomAction设置的属性

时间:2012-04-28 12:42:23

标签: wix custom-action

我想根据特定值在安装中包含不同的dll。所以,我试图根据使用自定义操作设置的属性加载组件。

在wxs文件中:

...
<Property Id="PropDllVersion" Value="0" />
...
<CustomAction Id="CheckPropDllVersion" BinaryKey="CustomAction1.dll" DllEntry="GetPropVersion" Return="ignore" Execute="immediate"/>
...
<InstallExecuteSequence>
    <Custom Action="CheckPropDllVersion" After="ValidateProductID" />      
</InstallExecuteSequence>
...
  <Component Id="Test"
     Guid="B81F832D-2D96-4169-9BD0-8D77098FEC60">
    <Condition><![CDATA[PropDllVersion = "19"]]></Condition>
    <File Id="File15"
      Name="xyz.dll"
      Vital="yes"
      KeyPath="yes"
      AssemblyManifest="File5"
      AssemblyApplication="File5"
      Assembly=".net"
      DiskId="1" 
      />
  </Component>
...

然后在自定义操作文件中:

[CustomAction]
        public static ActionResult GetPropVersion(Session session)
        {
    session["PropDllVersion"] = "19";
        }

我可以在msi日志文件中看到此属性更改为19,但xyz.dll未包含在安装中。看起来PropDllVersion没有设置在条件级别或我做错了什么......我试图在许多其他地方对它进行排序仍然无法正常工作......

如果我在条件中使用全局属性而不是我的属性它可以工作!

2 个答案:

答案 0 :(得分:3)

请注意private properties(其名称包含小写字母)在InstallExecuteSequence中使用其默认值。所以你应该使用public property,例如PROP_DLL_VERSION。

答案 1 :(得分:2)

您还想尝试对自定义操作进行排序吗?您需要在CostInitialize操作之前对其进行排序。

此外,在CostInitialize和CostFinalize操作之后调用FileCost操作。

您可以在此处查看CostInitialize操作的文档: http://msdn.microsoft.com/en-us/library/windows/desktop/aa368050%28v=vs.85%29.aspx