安装Finalize之前传递MSI属性

时间:2015-12-10 11:14:43

标签: wix burn

我的刻录包中有一个变量:

<Variable Name="DemoVariable" Type="string" Value="ChangedProperty" bal:Overridable="yes"/>

然后将其用于MSIProperty:

  <MsiPackage SourceFile="testFile.msi" Id="DemoPackageId_1" Cache="yes" Visible="no">
    <MsiProperty Name="PassedProperty" Value="[DemoVariable]"/>
  </MsiPackage>

在我的testFile.msi中,我有一个属性和自定义操作:

<Property Id="PassedProperty" Value="Unchanged"/> 

<Binary Id="CustomActionDll"
        SourceFile="CustomAction.CA.dll"/>

<InstallExecuteSequence>
  <Custom Action="ShowMessageBoxCA" Before="CostFinalize"/>
</InstallExecuteSequence>

<CustomAction Id="ShowMessageBoxCA"
              Return="check"
              Execute="firstSequence"
              BinaryKey="CustomActionDll"
              DllEntry="ShowMessageBox"
              HideTarget="no" />

ShowMessageBox函数只是调用:

MessageBox.Show(session["PassedProperty"])

问题是消息框显示消息&#34;未更改&#34;。我浏览了日志文件以了解安装情况,我可以看到在InstallFinalize完成后,PassedProperty正在被更改。对于我在CostFinalize之前进行的自定义操作,这显然为时已晚。

有没有办法让Burn在此过程中更早地更改MSIProperty而不是稍后进行自定义操作?

编辑:

好的,所以我找到了答案,但我还没有发布,所以我将这些信息留在编辑中。

MSI基本上拥有公共和私人财产。在安装阶段之前仅声明公共属性。公共属性必须全部大写,以便解决我的问题我刚刚替换了所有&#34; Passed_Property&#34;用&#34; PASSED_PROPERTY&#34;它工作正常。

1 个答案:

答案 0 :(得分:3)

所以我遇到的问题是我将我的属性创建为私有属性,直到安装之后才可用。要使您的属性公开并因此在整个安装过程中可用,它们必须为大写。

<Property Id="PASSED_PROPERTY" Value="Unchanged"/> 

https://msdn.microsoft.com/en-us/library/aa370912(v=vs.85).aspx

一旦我公开了这些属性,就会被Burn改变。