Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wix 自定义属性为空_Wix_Windows Installer - Fatal编程技术网

Wix 自定义属性为空

Wix 自定义属性为空,wix,windows-installer,Wix,Windows Installer,我有一个自定义操作,在即时阶段将文件位置存储到属性中。 然后我在deffered阶段执行另一个操作,读取此属性并创建文件: String configFilePath = session.CustomActionData["configPath"]; String configFileName = session.CustomActionData["configFile"]; ... 到目前为止一切正常。 卸载时,我想删除此文件,因此我有另一个不同的操作,该操作在删除文件后执行。操作有效,问题

我有一个自定义操作,在即时阶段将文件位置存储到属性中。 然后我在deffered阶段执行另一个操作,读取此属性并创建文件:

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>

要将数据传递给延迟的自定义操作,必须设置一个名与
CustomAction/@Id
匹配的
属性。对于通过立即
ConfigFileLocation
自定义操作执行的
setUpConfig
自定义操作,您的操作是正确的

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


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

若要将数据传递给延迟的自定义操作,必须使用与
CustomAction/@Id
匹配的名称设置
属性。对于通过立即
ConfigFileLocation
自定义操作执行的
setUpConfig
自定义操作,您的操作是正确的

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


因此,
removeConfig
customaction的
CustomActionData
属性为空。

谢谢,它现在可以工作了。如果我使用RegistryValue将属性写入注册表,并使用RegistrySearch将它们读取到某个属性,那么我是否仍然需要创建即时自定义操作以将数据传递到自定义卸载操作,还是最好直接从c#中的自定义卸载操作读取注册表值?或者有其他建议的方法吗?您只需要使用与自定义操作相同的名称设置
属性
。如果需要,您可以使用
RegistrySearch
直接设置
属性
,这对您很有用。谢谢,现在就可以了。如果我使用RegistryValue将属性写入注册表,并使用RegistrySearch将它们读取到某个属性,那么我是否仍然需要创建即时自定义操作以将数据传递到自定义卸载操作,还是最好直接从c#中的自定义卸载操作读取注册表值?或者有其他建议的方法吗?您只需要使用与自定义操作相同的名称设置
属性
。如果需要,您可以使用
RegistrySearch
直接设置
属性
,这对您很有用。