如何从WiX自定义操作中获取文件的路径?
我正在创建一个 WIX扩展,它有一个自定义元素,可以嵌套在<File>
组件下,如下所示:
<Component Id="FooComponent">
<File Id="filekey" Name="foo.txt">
<myextension:Stuff />
</File>
</Component>
扩展程序有自定义表,其外键列指向&#34;组件&#34;和&#34;文件&#34;表,并在安装/卸载文件组件时执行(例如内置的IIS扩展或SQL扩展)
我想要实现的是,在我的延迟(sheduled)自定义操作中,找出扩展名绑定到的文件的目标路径。即基本上在不同的自定义操作中,我希望得到[!filekey]
的值(就MSI formatted字符串而言)。我怎么能这样做呢?
我找到了一个类似的主题here
建议的解决方案之一是使用自定义操作中的MsiFormatRecord
并将[#filekey]
传递给该函数。它然后解析得很好。
我已经在WiX来源,游戏扩展和NetFX扩展中找到了使用此方法的示例;他们使用这样的代码:
StrAllocFormatted(&pwzFormattedFile, L"[#%s]", pwzFileId);
WcaGetFormattedString(pwzFormattedFile, &pwzGamePath);
此处WcaGetFormattedString
基本上是MsiFormatRecord
仍然没有答案,这是解决问题的正确方法吗?
答案 0 :(得分:0)
基本上,您将[!filekey]传递给该格式的延迟自定义操作,使用CustomActionData间接方式执行此操作。然后在您的自定义操作中,您将获得属性值[CustomActionData]。这可能会有所帮助:
How to pass CustomActionData to a CustomAction using WiX?
要拼写出来,如果用于准备CustomActionData的51类自定义操作的目标为[!filekey],那么当您在自定义操作中检索CustomActionData属性的值时,它将包含完整路径文件,整个路径和文件名。这显然有效,但如果您为许多文件执行此操作则不切实际。