我的刻录包中有一个变量:
<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;它工作正常。
答案 0 :(得分:3)
所以我遇到的问题是我将我的属性创建为私有属性,直到安装之后才可用。要使您的属性公开并因此在整个安装过程中可用,它们必须为大写。
<Property Id="PASSED_PROPERTY" Value="Unchanged"/>
https://msdn.microsoft.com/en-us/library/aa370912(v=vs.85).aspx
一旦我公开了这些属性,就会被Burn改变。