从C ++获取CustomActionData

时间:2015-08-13 16:06:45

标签: c++ visual-c++ wix

我有Wix个文件,我正在创建Deferred Custom Action。我编写了一个C#程序,目前正在循环CustomActionData并打印KeyValues。考虑下面给出的片段:

<Binary Id="myAction" SourceFile="..\Type51CA\bin\Release\Type51CA.CA.dll" />
<CustomAction Id="CustomAction1" Property="CustomAction2" Value="SomePropertyOne=[INSTALLFOLDER];SomePropertyTwo=[IPADDRESS];" />
  <CustomAction Id="CustomAction2" BinaryKey="myAction" DllEntry="MyCustomAction" Execute="deferred" Return="check" HideTarget="no" />
<InstallExecuteSequence>
   <Custom Action="CustomAction1" Before="CustomAction2" />
   <Custom Action="CustomAction2" Before="InstallFinalize" />
</InstallExecuteSequence>

我在CA SomePropertyOne设置了SomePropertyTwoId="CustomAction1"

以下C#代码可以迭代CustomActionData

session.Log("Begin MyCustomAction");
CustomActionData datas = session.CustomActionData;
foreach (KeyValuePair<String, String> data in datas)
{
   session.Log(String.Format("Key = {0} Value = {1}\n", data.Key, data.Value));
}

由于我想删除.Net的依赖项,我想在C ++中编写等效的C#代码;使用WcaGetProperty(L"CustomActionData",&caData)没有给我任何结果。在C ++中,如何从value获取相应Key所需的CustomActionData

1 个答案:

答案 0 :(得分:0)

CustomActionData可以根据需要简单,也可以根据需要复杂化。我最喜欢的是JSON,但实际上只要CA设置属性并且解码属性的CA遵循相同的规范,它就不重要了。