1

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

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

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

<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>
4

1 回答 1

1

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

但是,removeConfig自定义操作没有立即自定义操作设置为Property命名removeConfig

因此removeConfig自定义操作的CustomActionData属性为空白。

于 2013-03-21T14:15:49.787 回答