自定义属性为空

时间:2013-03-21 12:50:02

标签: wix windows-installer

我有自定义操作,可以立即将文件位置存储到属性中。 然后我在deffered阶段有另一个动作,它会读取这个属性并创建文件:

String configFilePath = session.CustomActionData["configPath"];
String configFileName = session.CustomActionData["configFile"];
...

到目前为止一切正常。 在卸载时我想删除这个文件,所以我有另一个被删除的动作,它在删除文件后执行。动作有效,问题是属性为空(session.CustomActionData为空)。 为什么?当卸载发生时,我已将其设置为立即阶段。如果我可以在自定义setUpConfig操作中读取它,为什么我无法在自定义removeConfig操作中读取它? 我想一个选项是在安装阶段将此值存储到注册表中,然后在卸载时从那里读取它。但我想知道为什么我可以在安装程序时设置属性,以及为什么在卸载时没有设置它。在两种情况下都会执行设置proeprty的操作。

<CustomAction Id="ConfigFileLocation" Property="setUpConfig" Execute="immediate" 
Value="configPath=[WEBSITE];configFile=config_template.asp" />

<CustomAction Id="setUpConfig" BinaryKey="MyCustomAction" DllEntry="configFile"  
Execute="deferred" Impersonate="no"  Return="check" />

<CustomAction Id="removeConfig" BinaryKey="MyCustomAction"  
DllEntry="removeCustomFile"  Execute="deferred" Impersonate="no"  Return="check" />

<InstallExecuteSequence>
<Custom Action="ConfigFileLocation" After="LaunchConditions" />
<Custom Action="setUpConfig" Before="InstallFinalize"><![CDATA[NOT REMOVE="ALL"]] />
<Custom Action="removeConfig" After="RemoveFiles"><![CDATA[REMOVE="ALL"]] />
</InstallExecuteSequence>

1 个答案:

答案 0 :(得分:1)

要将数据传递到延迟的自定义操作,您必须设置一个名称与Property匹配的CustomAction/@Id。您通过即时setUpConfig自定义操作正确执行ConfigFileLocation自定义操作。

但是,removeConfig自定义操作没有立即自定义操作设置名为Property的{​​{1}}。

错误removeConfig自定义操作的removeConfig属性为空。