【问题标题】:WiX: Changing the path of a directory does not change the path of a sub directory?WiX:更改目录的路径不会更改子目录的路径?
【发布时间】:2013-09-11 21:57:18
【问题描述】:

我有一个包含此目录声明的 WiX 安装程序:

<Directory Id="TARGETDIR" Name="SourceDir">
    <Directory Id="ProgramFiles64Folder">
        <Directory Id="MyCorp" Name="MyCorp">
            <Directory Id="INSTALLFOLDER" Name="FlowApp">
                <Directory Id="FLOW_COMPONENTS" Name="Components"/>
                <Directory Id="FLOW_CONFIGURATION" Name="Configuration"/>
            </Directory>
        </Directory>
    </Directory>
</Directory>

我有一个对话框允许更改安装文件夹位置:

<Fragment>
    <UI>
        <Dialog Id="LocationDialog" Title="FlowMaster 3000 server deployment" Width="370" Height="270" NoMinimize="no">
            <Control Id="PathLabel" Type="Text" Text="Install folder" X="10" Y="30" Width="70" Height="15" TabSkip="yes"/>
            <Control Id="InstallPath" Type="Edit" Property="INSTALLFOLDER" Text="{80}" X="100" Y="30" Width="260" Height="15" />

这在位置没有改变的情况下可以正常工作,但是当位置被用户改变时,虽然 INSTALLFOLDER 变量被正确改变了,但 FLOW_COMPONENTS 和 FLOW_CONFIGURATION 变量保留了它们原来的路径。查看日志:

Action start 14:38:59: CostFinalize.
MSI (c) (B8:B0) [14:38:59:308]: Dir (target): Key: INSTALLFOLDER    , Object: C:\Program Files\MyCorp\FlowApp\
MSI (c) (B8:B0) [14:38:59:308]: Dir (target): Key: FLOW_COMPONENTS  , Object: C:\Program Files\MyCorp\FlowApp\Components\
MSI (c) (B8:B0) [14:38:59:308]: Dir (target): Key: FLOW_CONFIGURATION   , Object: C:\Program Files\MyCorp\FlowApp\Configuration\

Action 14:39:03: LocationDialog. Dialog created
MSI (c) (B8:48) [14:39:07:302]: PROPERTY CHANGE: Modifying INSTALLFOLDER property. Its current value is 'C:\Program Files\MyCorp\FlowApp\'. Its new value: 'D:\Program Files\MyCorp\FlowApp\'.

Action start 14:39:37: ExecuteAction.
MSI (s) (64:20) [14:39:39:652]: PROPERTY CHANGE: Adding INSTALLFOLDER property. Its value is 'D:\Program Files\MyCorp\FlowApp\'.
MSI (s) (64:20) [14:39:39:652]: PROPERTY CHANGE: Adding FLOW_CONFIGURATION property. Its value is 'C:\Program Files\MyCorp\FlowApp\Configuration\'.
MSI (s) (64:20) [14:39:39:653]: PROPERTY CHANGE: Adding FLOW_COMPONENTS property. Its value is 'C:\Program Files\MyCorp\FlowApp\Components\'.

这会导致尝试在不存在的文件夹下创建子文件夹。

我应该添加什么以使安装文件夹的路径更改流向其子文件夹?

编辑

目录已填充。一个在单独的 wxs 文件中,其中包含由 Heat 收集的一组文件,另一个是这样的:

<ComponentGroup Id="Configuration" Directory='FLOW_CONFIGURATION'>
    <Component Id="Install.json" Guid="MY_GUID" >
        <File Id="Install.json" Name="Install.json" Source="$(var.SolutionDir)Configuration\Install.json" KeyPath="yes" />
    </Component>
</ComponentGroup>

我最初只是在我的功能中引用了组件组:

<Feature Id="Everything" Level="1" Display='expand' ConfigurableDirectory='INSTALLFOLDER'>
    <ComponentGroupRef Id="Components" />
    <ComponentGroupRef Id="Configuration" />
</Feature>

但是我现在已经用它们自己的 ConfigurableDirectory 属性使它们成为子功能:

<Feature Id="Everything" Level="1" Display='expand' ConfigurableDirectory='INSTALLFOLDER'>
    <Feature Id="SubComponents" ConfigurableDirectory='FLOW_COMPONENTS'>
        <ComponentGroupRef Id="Components" />
    </Feature>          
    <Feature Id="SubConfiguration" ConfigurableDirectory='FLOW_CONFIGURATION'>
        <ComponentGroupRef Id="Configuration" />
    </Feature>          
</Feature>

两种方式我都没有注意到差异。

【问题讨论】:

  • 只是猜测,尝试使用 DirectoryRef 元素,即将您的 FLOW_* 目录放在 ID 设置为 INSTALLFOLDER 的 DirectoryRef 元素中。将此 DirectoryRef 元素放在问题中显示的目录结构之外的某个位置。
  • 谢谢,但结果相同。
  • 您的目录中是否有任何文件,或者您只是打算创建新目录?
  • 我有文件。一个由 Heat 生成的单独 wxs 文件中的文件填充,另一个如上面的编辑所示。
  • 感谢您提供详细的问题,我找不到有关此主题的任何内容。我们刚刚遇到了同样的问题。

标签: wix


【解决方案1】:

您是否尝试过使用自定义操作?

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

  1. 更改在 CostFinalize 之前安排的目录属性值的自定义操作
  2. 类型 35 自定义操作,更改目录路径(应安排在 CostFinalize 之后)

例如:

<CustomAction Id="ChangeDir" Directory="INSTALLFOLDER" Value="[SomeValueorPropertyhere]"/>

2.在 InstallExecution 阶段调度操作(必须在 CostFinalize 步骤之后):

<Custom Action="ChangeDir" After="CostFinalize"></Custom>

【讨论】:

  • 我还没有走那条路,因为我认为在用户定义的安装位置下创建子目录是大多数安装所做的事情 - 所以我认为失败是我的。
猜你喜欢
  • 2019-08-30
  • 2015-02-27
  • 1970-01-01
  • 2011-10-21
  • 1970-01-01
  • 2021-08-31
  • 1970-01-01
  • 1970-01-01
  • 2010-11-29
相关资源
最近更新 更多