在WiX中设置目录

时间:2018-01-29 08:01:10

标签: directory wix custom-action

我正在尝试在与应用程序安装位置不同的位置创建一个文件夹,恰好是C:\ Program Files(x86)。我正在使用以下片段

 <Fragment>
    <DirectoryRef Id="TARGETDIR">
      <Directory Id="PhotosDir" Name="Photos" />       
    </DirectoryRef>
    <!--<SetDirectory Id="PhotosDir" Value="[TARGETDIR]Photos" Sequence="execute"></SetDirectory>-->
  </Fragment>

我尝试使用如上所示的SetDirectory元素,并使用CustomAction,如下所示。 (如果我同时使用这两个,我会收到一个错误,说Id是重复的。因此我对它进行了评论。)

<CustomAction Id="SetPhotosDir" Directory="PhotosDir" Value="[TARGETDIR]Photos"></CustomAction>
    <InstallExecuteSequence>    
      <Custom Action="SetPhotosDir" Before="CreateFolders"/>
    </InstallExecuteSequence>

我还为此目录元素定义了一个组件,如下所示。

<Component Id="cmpPhotosDir" Guid="{8F757344-CA0A-42BC-B292-A51CE86B19E2}" KeyPath="yes" Directory="PhotosDir"><CreateFolder/></Component>

但名为Photos的目录总是在D盘中创建,即使它嵌套在TARGETDIR中。我实际上想要控制创建这个目录的位置,可能是通过UI。我用Google搜索了SetDirectory元素示例,但无法找到合适的工作样本。我所看到的是我必须使用自定义操作类型35或51.但是不清楚这些自定义操作应该包含哪些代码。此外,我不确定,除了SetDirectory元素之外是否还需要这些自定义操作。有人可以通过一些工作样本来帮助我实现这个目标吗?

1 个答案:

答案 0 :(得分:0)

问题是您的目录标识符不是PUBLIC。更改名称不包括小写字母;仅使用大写字母,数字和下划线。 (最近这个问题反过来over here。)

我也可能会将操作安排到After="CostFinalize",或者只设置同名属性Before="CostInitialize。然而,这些都不可能与您的症状相关。