我有自定义操作,可以立即将文件位置存储到属性中。 然后我在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>
答案 0 :(得分:1)
要将数据传递到延迟的自定义操作,您必须设置一个名称与Property
匹配的CustomAction/@Id
。您通过即时setUpConfig
自定义操作正确执行ConfigFileLocation
自定义操作。
但是,removeConfig
自定义操作没有立即自定义操作设置名为Property
的{{1}}。
错误removeConfig
自定义操作的removeConfig
属性为空。