WiX CustomActionData 在调用的 CustomAction 中为空

Posted

技术标签:

【中文标题】WiX CustomActionData 在调用的 CustomAction 中为空【英文标题】:WiX CustomActionData is empty in called CustomAction 【发布时间】:2012-03-05 09:12:26 【问题描述】:

我又遇到了一个问题,这可能很容易解决。 我想扩展使用 WiX 创建的设置,以更改已安装程序的配置文件。为此,我创建了一个 CustomAction。为了能够更改配置文件,我需要知道它在我的 CustomAction 中的(安装)位置。因此,我尝试将 INSTALLLOCATION 和文件名传递给我的 CustomAction。这就是问题所在:CustomActionData-属性始终为空,并且设置会引发异常。

我的 CustomAction 是一个 C# DLL 文件:DemoDatumErzeugen.CA.dll。它包含一个修改配置文件的方法DatumEintragen。我正在尝试以这种方式访问​​数据:

string path = session.CustomActionData["LOCATION"];

这是引发异常的地方。我只收到德语错误消息,但它说的是类似的内容:The supplied key was not found in the dictionary (Der angegebene Schlüssel war nicht im Wörterbuch angegeben.)。

这就是我尝试将属性从我的设置脚本传递给我的自定义操作的方式:

<Binary Id="DemoDatumEinrichtenCA" SourceFile="DemoDatumErzeugen.CA.dll"/>

<CustomAction Id="DemoDatum.SetProperty" Return="check" Property="DatumEintragen" Value="LOCATION=[INSTALLLOCATION];NAME=StrategieplanConfig.xml;"/>
<CustomAction Id="DemoDatum" BinaryKey="DemoDatumEinrichtenCA" DllEntry="DatumEintragen" Execute="deferred" Return="check" HideTarget="no"/>

<InstallExecuteSequence>
  <Custom Action="DemoDatum.SetProperty" After="InstallFiles"/>
  <Custom Action="DemoDatum" After="DemoDatum.SetProperty"/>
</InstallExecuteSequence>

我见过很多例子,它们以相同或至少非常相似的方式完成。我尝试了很多东西,但似乎没有什么比更改 &lt;Custom Action="DemoDatum.SetProperty" After="InstallFiles"/&gt; 中的值更有用。 CustomActionData 始终为零。 我检查它:session.CustomActionData.Count 再次感谢任何帮助或提示我做错了什么。

【问题讨论】:

【参考方案1】:

DemoDatum.SetPropertyProperty 属性值应等于延迟操作的Id 属性值。因此,要么将属性名称更改为DemoDatum,要么将延迟操作的Id 更改为DatumEintragen

【讨论】:

确实!就是这样。十分感谢。很容易被忽视。 @Yan Sklyarenko 我在安装使用引导应用程序创建的 .exe 时遇到了一个问题。你能看看这个 SO 并帮助我***.com/questions/27151665/…

以上是关于WiX CustomActionData 在调用的 CustomAction 中为空的主要内容,如果未能解决你的问题,请参考以下文章

CustomActionData 用分号分隔,导致字符串溢出 - 此解决方案的常见解决方法是啥?

Wix:无法从Wix CustomAction调用DISM

从对话框调用 CustomAction 时出现 WiX 安装错误 2762

WIX - 单击一个按钮调用 dll 以运行批处理文件

Wix的自定义操作无法调用vb脚本

WIX 自定义卸载操作失败