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 图标

    我正在使用 Wix 来创建我的安装程序 据官方称文档 http wixtoolset org documentation manual v3 howtos ui and localization configure arp appearan
  • Burn(WiX bootstrapper)不会卸载MSI包

    我有一个包含此链的 Burn 捆绑包
  • WiX:如果虚拟目录包含嵌套目录,如何跳过删除 iis:WebVirtualDir?

    我的msi安装和卸载共享资源 IIS虚拟目录 MyTeamServices 它工作得很好 除了在卸载过程中删除该虚拟目录 即使有人创建了嵌套虚拟目录 不是通过使用安装程序 只是 手动 当我期望看到 WiX 处理 HDD 文件夹的标准行为时
  • MSI 与 nuget 包:哪个更适合持续交付?

    我们来讨论一下下面的话题 目前有一个应用程序正在使用熟悉的 xcopy 方法进行部署 这种方法使得管理依赖项 文件更新等变得困难 有一个想法是在一些软件包的帮助下开始应用程序部署 就像在 Linux 中借助RPM http en wikip
  • 使用自定义操作卸载多个产品

    我正在为我们的产品开发基于 WIX 的安装程序 该产品有一个基础产品和许多插件 基础版和插件将作为单独的 MSI 提供 仅当底座可用时才能安装插件 基础和插件在根文件夹下共享公共文件夹树 例如 C Program files MyProdu
  • 为什么卸载时我的服务没有被删除? (维克斯)

    即使重新启动后 即使可执行文件消失 服务仍然存在 我使用的是 WIX 版本 3 0 5419 0
  • 如何使用 WiX 安装和启动 Windows 服务

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

    我正在尝试编写一个自定义 WiX 对话框 作为其工作流程的一部分 它会根据某些条件显示错误图像 然而 WiX 似乎忽略了我的尺寸并按其感觉合适的方式显示 这是我的代码
  • WiX - 根据环境将编译后的 web.config 复制到网站根目录

    作为 WiX 安装的一部分 我将所有转换 编译的 web config 文件复制到安装目录 编译后的 web config 的名称格式为 web ENV config 在我的安装 UI 中 我创建了一个自定义对话框 在其中解析 ENV 并填
  • 在每台计算机安装中删除 HKCU 下的注册表项

    我使用 WiX 3 6 构建了一个 perMachine 安装程序来安装我尚未开发的软件 不幸的是 该软件在执行期间在 HKCU 下创建了一些注册表项 卸载时 还应删除自行创建的密钥 移除这些钥匙似乎并不那么容易 我正在与 ICE57 和
  • 如何使用 WiX 卸载时终止进程

    我正在使用 Wix 创建 msi 安装文件 当我卸载应用程序时 它仍然在工作 并且我可以在任务管理器中看到它 我已经尝试过自定义操作的延迟执行 如 Wix 文档中所述 https wixtoolset org documentation m
  • WiX:数字签名 BootStrapper 项目

    我有一个项目 我为其构建了 WiX msi 文件 我还有一个 WiX 引导程序 exe 文件 用于检查 C 2005 是否存在 如果未找到则安装它 然后安装 msi 软件包 我的项目包括作为 msm 文件的 Crystal Reports
  • Wix 为整个树生成单个组件 id

    我是一个几乎没有 wix 经验的人 我正在努力支持 Windows 以及我负责的组件 我正在尝试为我的产品生成的一组文件创建合并模块 这些文件存在于许多子目录中 我想知道如何为整个树中的所有文件创建一个组件 ID 我不担心小的升级 因为那是
  • 让 WiX Bootstrapper 用于 .NET 4.0 的引导

    我一直在寻找让我的引导程序能够安装 NET 4 0 和我自己的应用程序 我查看了几个博客和教程 但无法让它发挥作用 我在 Stack Overflow 问题中读到在 WiX 中启动 调用引导程序 https stackoverflow co
  • 无法使用wix工具集创建postgresql数据库

    我正在尝试使用 Wix ToolSet 在 PostgreSQL 中创建数据库 但总是收到错误 错误 2147467259 无法创建 SQL 数据库 pontow 错误详细信息 未知错误 当我尝试创建数据库或错误 无法连接到 SQL 数据库
  • 安装一系列嵌入式 MSI 软件包,每个软件包都使用嵌入式 UI - 显示通用进度条

    我正在使用 Windows Installer 4 5 新功能和 WiX 来生成MSI http en wikipedia org wiki Windows Installer包 我创建了一个 MSI 链安装 以便将其他 MSI 包的集合作
  • WiX 自定义操作项目 - BadImageFormatException

    我正在开发我的第一个自定义操作 但无法加载生成的 CA dll 文件 这是最简单的过程和结果 我创建了一个自定义操作项目并保留所有默认值 该类看起来像这样 using Microsoft Deployment WindowsInstalle
  • 安装引导程序如何检测是否安装了先决条件?

    试图解决这个问题 https stackoverflow com questions 2591384 bootstrapper setup exe says net 3 5 not found but launching msi direc
  • 将引导程序与 MSI ui 一起使用

    我有可以安装的 MSI 文件 它包含一个定制的 UI 还收集用户的数据 作为安装的一部分 如果缺少的话我想安装以下内容 Net框架4 0 Microsoft Visual C 2010 可再发行组件包 x64 据我所知 引导程序也应该包含
  • 安装后如何执行Wix自定义操作?

    我正在使用 Wix3 将 WCF 服务安装到 IIS 安装完成后如何使用我的自定义操作 c 函数 即我需要打开已安装的 web config 文件并将主机名替换为真实的主机名 有任何想法吗 您可以安排在之后安装完成 http wix sou

随机推荐

  • 在后台 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 安装程序 其中包含以下目录声明