如何使用CustomAction在WIX中设置目录路径?

时间:2016-07-14 09:26:37

标签: c# wix custom-action

我在WIX中有这样的目录结构

$(document).on('click', '[id$=btnSample]', function() {
   ajax({
      url: 'path/to/handler',
      method: 'POST',
      data: { key: 'value', ... },
      success: function(data) {
         OnGetCustomer(data);
      },
      error: function() {
         console.log('Error on ajax call!');
      }
   });
});

现在这个MAINFOLDER目录解析为D:\ XXX \ YYY \ MAIN \

我从服务中获取MAINFOLDER的路径,该服务解析为E:\ XXX \ YYY \ MAIN 我还在cs文件中分配了一个customAction 以下是代码

[CustomAction]

<Directory Id="TARGETDIR" Name="SourceDir" >
  <Directory Id="XXXFOLDER" Name="XXX">
    <Directory Id="YYYFOLDER" Name="YYY">
      <Directory Id="MAINFOLDER" Name="MAIN">

我的自定义操作如下:

    public static ActionResult GetNewDataPath(Session session)
    {

        sNewDataDir = xxxservice.GetPath();
        if (!String.IsNullOrEmpty(sNewDataDir.ToString()))
        {
            sNewDataDir+= "\\MAIN\\";
        }

        session["MAINFOLDER"] = sNewDataDir;
        return ActionResult.Success;
    }

这是安装顺序:

<CustomAction Id="GETDATAPATH" BinaryKey="InstallerCA"      
  DllEntry="GetNewDataPath" Execute="immediate"/>

sNewDataDir包含此值=“E:\ XXX \ YYY \ MAIN”并且我分配给会话[“MAINFOLDER”]。它被分配了。但它没有反映在WIX端,因为我的文件仍然被复制到D:\ XXX \ YYY \ Main,尽管将它分配给E:\ XXX \ YYY \ Main。我们如何使用CustomAction更改会话[“MAINFOLDER”]的目标路径?

1 个答案:

答案 0 :(得分:2)

这通常是一个序列问题。在CostFinalize操作per MSDN期间,属性的值将分配给目录路径。您在上面的自定义操作必须在CostFinalize在执行序列中运行之前的某个时间排序。

它也可能是一个特权问题:MAINFOLDER可能是一个受限制的公共属性,并且没有使它成为执行序列(如果您的自定义操作在执行序列中运行,则不适用)。阅读Restricted Public Properties,了解这可能是您的问题。

它也可以是您的计算机的anti-virussome其他issue与脚本引擎。

要有一个好主意(或者至少找到能够弄清楚问题究竟是什么的其他人),您需要生成失败尝试的良好日志。大多数时候voicewarmup(或/ l * v)是最好的使用价值(往往会给你最多但不是全部你想要的东西,以及你不想要的东西)并且是大多数安装开发专家在生成他们使用和共享的日志时使用的值。但是,它确实会减慢您的安装速度。