【问题标题】:How to set a Directory path in WIX using CustomAction?如何使用 CustomAction 在 WIX 中设置目录路径?
【发布时间】:2016-07-14 19:15:21
【问题描述】:

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

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

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

我从解析为 E:\XXX\YYY\MAIN 的服务中获得了主文件夹的路径 我还在cs文件中分配了一个customAction 下面是代码

[自定义操作]

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

这是安装顺序:

<Custom Action="GETDATAPATH" Before="CostFinalize" />

sNewDataDir 包含这个值 = "E:\XXX\YYY\MAIN",我分配给 session["MAINFOLDER"]。它被分配。但它并没有反映在 WIX 方面,因为我的文件仍然被复制到 D:\XXX\YYY\Main 尽管将其分配给 E:\XXX\YYY\Main 。我们如何使用 CustomAction 更改 session["MAINFOLDER"] 的目录路径?

【问题讨论】:

    标签: c# wix custom-action


    【解决方案1】:

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

    这也可能是一个特权问题:MAINFOLDER 可能是一个受限制的公共属性,并且不会进入执行序列(如果您的自定义操作在执行序列中运行,则不适用)。阅读Restricted Public Properties,看看这是否是您的问题。

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

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

    【讨论】:

    • @ B. Murri - 我尝试在 Before 属性中应用 CostInitialize 但它不起作用。我已经编辑了上面的代码来添加 CustomAction。你能检查一下是否可以吗?
    • 看起来正确。您的日志记录围绕被调用的操作显示了什么?
    • 终于解决了这个问题。我只是更改了作为主文件夹路径的父文件夹路径,而不是主文件夹中的文件夹,因此路径未更新。现在我通过自定义操作手动更新了文件夹的所有路径,它工作正常。谢谢
    猜你喜欢
    • 1970-01-01
    • 2010-11-04
    • 1970-01-01
    • 1970-01-01
    • 2018-07-07
    • 2021-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多