【问题标题】:WiX unable to check property that is set using CustomActionWiX 无法检查使用 CustomAction 设置的属性
【发布时间】:2012-04-30 14:13:18
【问题描述】:

我想根据某些值在安装中包含不同的 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 没有在条件级别设置,或者我做错了什么...我尝试在许多其他地方对其进行排序仍然无法正常工作...

如果我在条件中使用全局属性而不是我的属性,它会起作用!

【问题讨论】:

  • 不知道为什么我对这个问题有负面评价。并不是说我没有尝试过这里介绍的所有其他解决方案。不胜感激这个问题的负面评价的原因......

标签: wix custom-action


【解决方案1】:

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

【讨论】:

  • 我昨天试过了,没用,可能是忘记编译自定义操作了。现在试了,效果很好!
【解决方案2】:

您还尝试在哪些地方对自定义操作进行排序?您需要在 CostInitialize 操作之前对其进行排序。

另外,在 CostInitialize 之后调用 FileCost 操作,然后调用 CostFinalize 操作。

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

【讨论】:

    猜你喜欢
    • 2010-11-04
    • 1970-01-01
    • 2018-07-27
    • 1970-01-01
    • 2018-05-15
    • 1970-01-01
    • 2020-11-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多