WiX:更改目录的路径不会更改子目录的路径?

2023-11-29

我有一个 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\'.

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

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

EDIT

目录已填充。一个位于单独的 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>

无论如何我都没有注意到有什么区别。


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

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

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

例如:

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

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

<Custom Action="ChangeDir" After="CostFinalize"></Custom>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WiX:更改目录的路径不会更改子目录的路径? 的相关文章

  • 为什么我的 WiX 安装程序需要一个空的 CreateFolder 来有条件地更新 Xml 文件?

    TL DR 为什么我需要一个empty
  • Wix升级:预选功能

    我们使用 Wix 来创建我们的安装程序 我们使用的用户界面可以选择需要安装的功能 某些功能默认启用 其他功能则禁用 但是 当我们运行升级时 这些默认值将被保留 我们希望安装程序记住安装了哪些功能 并在功能树中启用它们以进行升级 应禁用所有其
  • TrustedInstaller 正在阻止注册表写入 HKCR\DirectShow\MediaObjects\Categories

    我正在尝试安装需要我写入的 DMOHKCR DirectShow MediaObjects Categories 57f2db8b e6bb 4513 9d43 dcd2a6593125 此注册表路径受 TrustedInstaller 保
  • 当我尝试卸载包含 NSSM 服务的软件时,失败

    对于以下安装程序包 我有服务XXXService当我安装我的包时 成功安装并运行 但卸载失败并出现错误并恢复 我怀疑该服务仍在运行 阻止删除main exe file 请帮助完成卸载工作 重现此错误的完整最小源是可用的 https gith
  • WiX 安装程序:使用 xslt 和 heat.exe 来更新属性

    我正在尝试为 Windows 服务创建 WiX 安装程序 并且我读到需要将所有文件的 KeyPath 设置为 no WiX 脚本中的 exe 除外 我目前正在使用 Heat exe 生成目录和文件结构 这是我的命令 WIX bin heat
  • Wix:如何警告用户而不是使用属性终止安装?

    我正在 x64 计算机上搜索 Microsoft Access 数据库引擎的注册表项 这是我的代码
  • 是否可以使用 WIX 创建多语言安装程序?

    是否可以使用 WIX 创建多语言安装程序 如果您创建嵌入式转换 则无需引导程序即可执行此操作 并且 MSI 安装程序将根据您的系统区域设置自动应用其中之一 有关完整的详细信息和脚本 请点击以下链接 http www geektieguy c
  • Wix 自定义对话框

    目前 我们的安装向导使用的是 Wix 经典主题 现在 我们计划改进安装程序的外观和感觉 1 我如何将自定义对话框经典主题更改为其他主题 2 在安装我们的设置时 我们计划显示一些图像 例如幻灯片放映 是否可以像 Wix 中那样显示图像 我是否
  • 显示目录列表控件中的文件

    有没有办法让用户使用 BrowseDlg 选择特定文件 我所能找到的是你只能选择一个文件夹 我相信文件选择是正在使用的 常见 功能之一 任何人都可以提供一些关于如何实现这一目标的建议 Thanks Update 我正在考虑为此创建一个 C
  • Wix 自定义操作仅在安装期间执行,但不在升级和删除时执行?

    我有一个自定义操作 该操作只能在安装期间执行 而不能在次要版本升级和删除期间执行 我尝试了不同的条件 但 CA 正在次要版本期间执行 1 未安装 或不 删除 全部 并升级产品代码 2 未安装 3 未安装 或未 已安装并删除 全部 并升级产品
  • 如何使用 WiX 安装和启动 Windows 服务

    我尝试在 Wix 中使用下面的代码 但是在安装时 安装程 序在 正在启动服务 状态下冻结了大约 3 分钟 然后我收到此消息 Service Jobservice 无法启动 请验证您是否有足够的权限来启动系统服务 我的代码有什么错误吗 并且可
  • 在 WiX Bundle 中包含 .NET 安装程序未检测是否已安装

    我使用的是 WiX 3 7 无法让简单的 捆绑元素正常工作 因为它不会带来 Net FX 安装程序包 也不会将其嵌入到 setup exe 中 我已经在我的程序中为此创建了自己的包Bundle wxs文件 但我仍然遇到麻烦 即使机器已经安装
  • 使用 WiX 将程序集放入 GAC 和安装路径中

    我刚刚开始学习如何使用 WiX 但遇到了障碍 我的软件包使用第三方库 该库要求 GAC 和软件包安装目录中都存在一些文件 使用 WiX 我可以使文件显示在安装目录或 GAC 中 但不能同时显示在两者中 有什么办法可以解决这个问题吗 这里有一
  • WIX MSI 软件包卸载

    我正在使用 WIX 作为安装程序包 当我通过双击原始 msi 包卸载该包时 一切都很好 当我从控制面板卸载时 它会给我一个最小的用户界面卸载 我已在 MSI 中写入一个自定义操作 询问用户是否要卸载某些数据库等 最小 UI 卸载时不会发生这
  • WiX - 根据环境将编译后的 web.config 复制到网站根目录

    作为 WiX 安装的一部分 我将所有转换 编译的 web config 文件复制到安装目录 编译后的 web config 的名称格式为 web ENV config 在我的安装 UI 中 我创建了一个自定义对话框 在其中解析 ENV 并填
  • 在wix中添加文件夹到安装程序而不是文件?

    我的安装程序必须将文件复制到 installdir 我的应用程序有大约 2000 个文件 我不可能编写脚本将每个文件添加到安装程序中 wix中是否有任何选项可以让我一次添加所有文件或包含文件的整个文件夹 我是 wix 新手 我在任何教程中都
  • 根据 VS 活动配置定义 Wix 属性和值

    如何定义根据激活的 Visual Studio 配置而变化的 Wix 属性和值 例如对于我们的发布版本 var x 1 对于导出版本 var x 2 我们使用 wixproj 文件将属性传递到 WiX
  • 自定义 WiX Burn 引导程序用户界面?

    我主要使用 WiX 3 6 创建一个安装包 这样我就可以利用Burn http en wikipedia org wiki WiX Burn引导功能 到目前为止 我已经将多个 MSI 软件包捆绑在一起 这些软件包将与内置引导程序应用程序一起
  • Wix:动态添加功能

    我们正在使用 Wix 为我们的软件构建 msi 我们有一些要在目标机器上实现的组件 插件 每个客户端的插件都不同 我们想要做的是创建一个标准构建并修改 msi 包中的功能列表 有没有办法通过自定义操作动态更改功能列表 例如 从自定义操作中读
  • Wix - 自定义安装目录

    我使用的是 Wix 3 x 用户应该能够选择目标目录 我的Setup wxs目前是这样的 http pastebin com uH1EjbDQ http pastebin com uH1EjbDQ 询问用户自定义目标目录的最简单方法是什么

随机推荐

  • 在后台 Swift 发送用户位置

    我正在构建一个应用程序 用户单击按钮 我们通过将他们的位置上传到服务器来跟踪他们 60 分钟 或任意时间 目前我们正在使用 更新位置 功能将用户位置实时发送到 firebase func locationManager manager CL
  • Primefaces 以编程方式打开可关闭对话框

    我想从支持 bean 动态创建一个 primefaces 对话框 我已经写了上面的代码 public void showDialog UIComponent panelGroup facesContext getViewRoot findC
  • FB.getLoginStatus 突然停止在 Android 浏览器上工作

    我曾经使用过这段代码 FB getLoginStatus function response 但突然间它不起作用 回调不会触发 但奇怪的是 仅适用于 android 本机浏览器 测试过 4 0 4 1 它适用于 iPhone iPad Ch
  • 反转颜色 OpenCV Java Api

    如何反转存储在中的图像的颜色Mat image在OpenCV的Java API中 使用image inv 给我一个错误 inv 用于计算逆矩阵 use 按位非反而 Core bitwise not image image
  • 如何在android中的自定义列表视图中实现搜索?

    我的应用程序中有一个编辑文本和一个列表视图 我的列表视图显示联系人列表 我想要带有编辑文本的列表视图过滤器 我在谷歌上搜索了很多 找到了一些例子 但没有一个对我有用 这是我的代码我的自定义适配器 public class ContactLi
  • 如何使用 jQuery 隐藏 ASP.Net CheckBoxList 控件中复选框周围的边框?

    我需要去掉由 CheckBox 控件呈现的各个复选框周围的边框 现在看起来是这样的 ASP Net 标记很简单
  • 从 Flask 视图发送 WebSocket 消息

    我正在尝试制作一个使用 WebSockets 的 Flask 应用程序 这来自 Flask socket 的示例可行 但我如何从常规视图发送消息 与 Flask SocketIO 的使用方式类似 emit and send 方法 在下面的示
  • Google::protobuf + boost::asio 失败

    我研究了现有的例子 使用 boost asio 发送 Protobuf 消息 使用 boost asio read async 读取 Protobuf 对象 Google Protocol Buffers C 的 parseDelimite
  • 移动刻度标签JavaFx 2

    是否可以将刻度标签移动 移动到图表中 目前我看到隐藏 显示刻度标签的 API 是否有可以在图表内移动刻度标签的 API 如果没有 API 那么我可以使用 应用某种技术来完成此任务吗 当前代码 public class Graph exten
  • 将强度点数组转换为标记

    所以我有这个代码 热图已经添加 但现在我需要为每个具有强度点的地方添加标记 我有纬度和经度以及强度 我还想使用该标记显示数据 我有这段代码 但无法为每个强度点添加标记并显示数据 div style width 100 height 600p
  • 在播放 m3u8 文件期间,ACodec 对 OMX_GetExtensionIndex 的调用失败

    这在某种程度上是问题的后续 m3u8 文件无法在 Android 模拟器中播放 我遇到了与那里提出的问题非常相似的问题 但是使用了 JB 已移植到的真实设备 项目详细信息位于 http groups google com group ren
  • 双感叹号? [复制]

    这个问题在这里已经有答案了 可能的重复 是什么 JavaScript 中的 不是 not 运算符 是什么意思啊 JavaScript 中的运算符 双感叹号 是什么意思 所以我正在调试一些代码并遇到了这个 var foo bar 0 this
  • 对列表的一部分进行适当排序

    假设我们有一个列表 a 4 8 1 7 3 0 5 2 6 9 现在 a sort 将就地对列表进行排序 如果我们只想排序怎么办a part列表中的内容 还在吗 在 C 中我们可以这样写 int array 4 8 1 7 3 0 5 2
  • Google Sheets SUM() 不返回零,而是返回一个极小的数字? [复制]

    这个问题在这里已经有答案了 我有一个包含以下值的 Google 表格 12 4840 8 1870 0 9630 3 3210 3 4550 0 3140 3 3470 7 1290 If I SUM 这些 预期结果是0 零 但事实并非如此
  • 如何从android中另一个项目的活动调用一个项目的活动?反之亦然?

    我正在做一个集成项目 其中涉及将两个项目集成为一个 我想要做到这一点的是 我有一个公共项目 这个公共项目的活动应该能够调用其他两个项目的活动 根据不同像按下特定按钮等事件 我该怎么做 可以通过意图吗 另外 其他两个项目的活动应该能够相互调用
  • 为什么公开 List 被认为是不好的? [复制]

    这个问题在这里已经有答案了 根据 FXCop 的说法 List 不应在 API 对象模型中公开 为什么这被认为是不好的做法 我同意丛林中的驼鹿 List
  • Angular 和 Laravel

    如何在 XAMPP 上设置 Laravel 和 Angular js 文件夹结构 我了解创建一个 RESTFULL Laravel API 我一直在开发一个应用程序 但是当我在浏览器中输入类似 contacts john 的地址时 我会得到
  • -webkit-animation-play-state 在 Chrome 中不起作用

    我设置了一个简单的 JSFiddle 来说明问题 暂停状态在哪里 谁能告诉我为什么 Safari 按预期显示动画元素处于暂停状态 但在 Chrome 中动画正在运行 我正在使用 Chrome 33 0 1750 146 想知道这是否是最新版
  • 使用 gradle eclipse 插件指定 JRE 容器

    即使当属性为sourceCompatibility and targetCompatibility设置为特定的 JRE 版本 类路径条目将为JRE CONTAINER只能生成为
  • WiX:更改目录的路径不会更改子目录的路径?

    我有一个 WiX 安装程序 其中包含以下目录声明