Wix:在自定义操作中写入文件

时间:2011-05-02 18:55:32

标签: c# wix custom-action

我遇到了 wix 的问题并管理了自定义操作:在我的自定义操作中,我创建了一个文件并将其保存在 INSTALLLOCATION 路径中。它似乎工作,没有抛出异常。但是在安装之后, INSTALLLOCATION 中刚刚创建的文件不存在。

维克斯-文件:

<CustomAction Id="SetInstallPath" Property="CreateTimeStamp" Value="[INSTALLLOCATION]"
   Execute="immediate"/>
<CustomAction Id="CreateTimeStamp" BinaryKey="SetupActions.dll"  
   DllEntry="CreateTimeStampFile" Execute="deferred" Return="check"/>
<InstallExecuteSequence>
  <Custom Action="SetInstallPath" Before="InstallFinalize"/>
  <Custom Action="CreateTimeStamp" Before="InstallFinalize"/>
</InstallExecuteSequence>

定制操作-了Methode:

...
var keys = new string[session.CustomActionData.Keys.Count];
session.CustomActionData.Keys.CopyTo(keys, 0);
var cad = keys[0];
var filepath = cad + "myfile.xml";
File.Create(filepath);
...

有人有想法吗?

编辑:在Scott Boettger的帖子之后编辑了wix文件内容。

2 个答案:

答案 0 :(得分:7)

我认为您的配置不正确。以下是一些问题:

  1. 您不应在InstallExecuteSequence中使用私有属性(CREATE_TIME_STAMP优于CreateTimeStamp,因为它是公共属性)。
  2. 您正在设置CreateTimeStamp属性并在自定义操作中读取CustomActionData。您应该将 CustomActionData 属性设置为INSTALLLOCATION路径。
  3. 由于您的自定义操作是在安装文件夹中创建文件,因此它应该作为延迟运行,模拟属性应设置为“否”。这样它就有足够的权限来创建文件。
  4. 尝试进行这些修改,看看问题是否仍然存在。

答案 1 :(得分:6)

我认为您的自定义操作需要介于InstallInitialize和InstallFinalize之间。试试这个:

<InstallExecuteSequence>
  <Custom Action="SetInstallPath" After="InstallInitialize"/>
  <Custom Action="CreateTimeStamp" Before="InstallFinalize"/>
</InstallExecuteSequence>