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

本文关键字:文件 自定义 Wix | 更新日期: 2023-09-27 17:54:31

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

WiX-File:

<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>

Custom-Action-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-file内容之后。

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

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

  1. 你不应该在InstallExecuteSequence中使用私有属性(CREATE_TIME_STAMP比CreateTimeStamp更好,因为它是公共属性)。
  2. 你正在设置CreateTimeStamp属性并在你的自定义操作中读取CustomActionData。您应该将CustomActionData属性设置为INSTALLLOCATION路径。
  3. 由于您的自定义操作是在安装文件夹中创建一个文件,因此它应该延迟运行,并且Impersonate属性应该设置为"no"。这样它将有足够的权限来创建文件。

尝试做这些修改,看看问题是否仍然存在。

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

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