- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在使用延迟 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/
我在使用延迟 CustomAction 时遇到问题,其中参数以 [#file.Product.exe.config] 样式作为文件 ID 引用传递: 然后我有一个名为 Configura
我一直在寻找一种解决方案,通过事件跟踪 (ETW) session 中的特定进程获取所有读/写/打开/关闭文件(我将处理来自实时 session 的数据)。我编写这段代码并获取该操作中的所有事件,但我
我是一名优秀的程序员,十分优秀!