WIX用户界面覆盖文件夹路径自定义操作

本文关键字:自定义 操作 路径 文件夹 用户界面 覆盖 WIX | 更新日期: 2023-09-27 18:11:54

假设我有这样的目录结构:

<Directory Id="TARGETDIR" Name="SourceDir">
  <Directory Id="test" Name="test">
    <Component Id="file" Guid="*">
      <File Id="file" Source="file.dll"></File>
    </Component>
  </Directory>
</Directory>

这将安装file.dll到C:'test。我想做的是在安装期间覆盖该文件目录的C:'newpath',并在那里安装文件。我已经尝试了这与自定义操作没有运气。我确实看到了调试行,所以我知道它正在被调用,只是文件仍然安装在C:'test

<InstallExecuteSequence>
  <Custom Action="OverwriteDir" After="CostFinalize" />  
</InstallExecuteSequence>
[CustomAction]
public static ActionResult OverwriteDir(Session session)
{
     System.Diagnostics.Debug.WriteLine(session["tester"]);
     session["tester"] = "C:''newpath";
     return ActionResult.Success;
}

我能做些什么不同的?

WIX用户界面覆盖文件夹路径自定义操作

首先,您需要确保MSI中包含您的文件的文件夹使用公共安装程序属性(其名称中没有小写字母)作为其ID。最好的解决方案是TARGETDIR,因为它已经配置好了。

之后,您可以使用以下自定义操作之一来在安装期间更改属性值:

  • 更改在CostFinalize
  • 之前调度的目录属性值的自定义操作
  • 一个type 35自定义动作,它改变目录路径(应该在CostFinalize之后调度)