gpt4 book ai didi

WiX [#filekey] 未解析且无法用作托管 CustomAction 中的路径

转载 作者:行者123 更新时间:2023-12-02 18:08:52 26 4
gpt4 key购买 nike

我在使用延迟 CustomAction 时遇到问题,其中参数以 [#file.Product.exe.config] 样式作为文件 ID 引用传递:

<Component Id="comp.Product.exe.config" 
Guid="{966DA007-E3F0-4BFE-94ED-63A66F82CA58}"
Win64="$(var.Win64)">
<File Id="file.Product.exe.config"
Name="Product.exe.config"
Source="$(var.SourcePath)\Product.exe.config"
KeyPath="yes" />
</Component>

然后我有一个名为 ConfigurationFile 的属性,稍后将其传递给延迟的自定义操作,如下所示:

<Property Id="ConfigurationFile" 
Value="[#file.Product.exe.config]" />

我之前分配了 ConfigurationFile 属性 Value="[APPLICATIONROOTDIRECTORY]\Product.exe.config",它工作得很好,但因为我们需要将配置安装到不同的文件夹(必须这样做的原因是无关紧要的)到此主题),我必须使用 [#file.Product.exe.config] 语法更改它以从安装程序解析配置文件的位置。

当自定义操作收到参数时,它仍然采用 [#file.Product.exe.config] 格式(即未解析),并导致大量问题。我很困惑很长一段时间,因为根据日志记录,它似乎应该可以工作。事实证明,Session.Log() 解析了此文件引用,这导致日志在参数的实际内容方面向我“撒谎”。

我尝试了不同的方法来“清理”该字符串,包括 session.Format()这会导致 InvalidHandleException,使用记录(如下所述)和其他方式没有运气。

using (Record formatRec = new Record(0))
{
formatRec.FormatString = p0;
return formatRec.GetString(0) // Or formatRec.ToString();
}

WiX 中提供了几个处理此约定的自定义操作。然而,我还没有弄清楚他们是如何做到的。在深入研究这些自定义操作的源代码时,目前还没有运气。

Session.CustomActionData 检索自定义操作的参数。

有没有好的方法来处理这个问题?

最佳答案

您需要一个type 51 custom action设置属性:

<CustomAction Id="SetProductConfigPath"
Property="ConfigurationFile"
Value="[#file.Product.exe.config]"
Execute="deferred"/>
<InstallExecute>
<Custom Action="SetProductConfigPath"
Before="InstallInitialize">/>
</InstallExecute>

您可能需要将计划调整为“InstallInitialize”以外的其他内容。

请参阅博客文章 From MSI to WiX, Part 5 - Custom actions: Introduction 获取所有 CustomAction 类型的列表,以及博客文章 Property does not exist or empty when accessed from deferred custom action 有关延迟自定义操作的详细说明。

我希望这会有所帮助。

关于WiX [#filekey] 未解析且无法用作托管 CustomAction 中的路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9669983/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com