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