我又一次陷入了一个问题,那可能很容易解决。
我想扩展一个用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>
我见过很多例子,都是以相同的方式,或者至少非常相似。我尝试过很多方法,但在
<Custom Action="DemoDatum.SetProperty" After="InstallFiles"/>
中更改值似乎没有任何帮助。customActionData始终为零。我查了一下:
session.CustomActionData.Count
我再次非常感谢你的帮助或暗示,我做错了什么。
最佳答案
Property
的DemoDatum.SetProperty
属性值应等于延迟操作的Id
属性值。因此,要么将属性名更改为DemoDatum
,要么将延迟操作的Id
更改为DatumEintragen
。