WiX Burn:从注册表读取 LaunchTarget

2024-05-02

我是 WiX 的新手,我试图让我的 Bootstrapper 在完成后启动我安装的应用程序。为了实现这一点,我正在使用

<Variable Name="LaunchTarget" Value="path_to_exe"/>

然而,获取可执行文件的路径对我来说并不容易。原因是我使用 安装一些先决条件,然后使用 msi 实际安装我的 exe。

为此,msi 将路径写入注册表中的已知位置,然后引导程序读取并使用它。

问题在于,当引导程序读取注册表时,msi 尚未运行,因此它最终无法运行可执行文件。

这是我的 WiX,如果有帮助的话:

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:bal="http://schemas.microsoft.com/wix/BalExtension" xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
    <Bundle Name="My Installation" UpgradeCode="a8964402-f3fc-4878-aafd-31ecda6b685e" Version="1.0.0.0">
        <BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense">
            <bal:WixStandardBootstrapperApplication LicenseFile="EULA.rtf"
                                                    ThemeFile="theme.xml"
                                                    SuppressOptionsUI="yes" />
        </BootstrapperApplicationRef>
        <Chain>
            <PackageGroupRef Id="NetFx40Redist"/>
            <ExePackage Id="OpenSSL" SourceFile="pre-requesite.exe" />
            <MsiPackage Id="myInstall" SourceFile="mySetup.msi" />
        </Chain>
        <util:RegistrySearch Root="HKLM"
                             Key="Software\myProgram"
                             Value="myEXEPath"
                             Variable="myEXEPath"
                             Result="value"
                             Format="raw" />
        <Variable Name="LaunchTarget" Value="[myEXEPath]"/>
    </Bundle>
</Wix>

所以,简而言之,我正在尝试运行RegistrySearchAFTERMsiPackage 安装。这可以做到吗?如果没有,我还有哪些选择?

正如我附注的那样,如果我在安装之前手动填写注册表值,一切都会正常工作。这意味着除了运行的顺序之外,一切都工作正常。


注册表搜索在检测操作期间运行。自定义 BA 可以在应用后运行检测,但这并不是一个真正的选项,因为您使用的是 WixStandardBootstrapperApplication。

幸运的是,WiX v3.9 添加了对运行已提升的 LaunchTarget 的支持,并要求目标 .exe 的路径位于 HKLM 下的注册表中。所以你会这样做:

<BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense">
    <bal:WixStandardBootstrapperApplication LicenseFile="EULA.rtf"
                                            ThemeFile="theme.xml"
                                            SuppressOptionsUI="yes"
                                            LaunchTargetElevatedId="MyAEEId" />
</BootstrapperApplicationRef>
<ApprovedExeForElevation Id="MyAEEId" 
                         Key="Software\myProgram" Value="myEXEPath" />

Edit:

看起来你需要设置LaunchTarget以及。为什么你的包不知道它会在哪里?你可以直接输入乱码LaunchTarget(WixStdBA会先尝试注册表位置),但是你不能使用内置变量 http://wixtoolset.org/documentation/manual/v3/bundle/bundle_built_in_variables.html and/or MsiProperty http://wixtoolset.org/documentation/manual/v3/xsd/wix/msiproperty.html元素来定位exe?

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

WiX Burn:从注册表读取 LaunchTarget 的相关文章

  • 在 Wix 安装程序中以管理员模式运行 customAction 中的 ExeCommand

    我是 wix 安装程序的新手 我已经为我的应用程序使用 wix 安装程序开发了一个设置 我需要执行自定义操作来运行 cmd exe 中的命令 XP 下运行正常 但在 Windows 8 和 7 中 cmd 提示符需要以管理员身份运行 我用谷
  • WiX:如果虚拟目录包含嵌套目录,如何跳过删除 iis:WebVirtualDir?

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

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

    在 Microsoft 我们长期以来一直使用 WIX 工具集版本 3 5 2519 0 来为我们名为 System Center Service Manager 又名 SCSM 的产品构建安装程序和补丁 最近我们需要更新到 WIX Tool
  • Wix如何隐藏功能选项

    我正在使用 Wix 3 5 构建 MSI 安装程序 我想知道是否有任何方法可以隐藏 功能自定义安装对话框 中的某些选项 您可以在其中从功能树中选择要安装的内容 我只想有 将安装在本地硬盘上 和 整个功能将不可用 的选项 目前 除了这两个选项
  • 如何使用 WiX 安装和启动 Windows 服务

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

    多亏了这个question https stackoverflow com a 33679439 1076116 我能够执行自定义操作来临时更新和动态修改 MSI 数据库 简而言之 我正在做 CustomAction public stat
  • 我应该如何处理 WiX 安装程序中的产品升级?

    我有一个相当大的 WiX 安装程序 250 Mb 以上 我正在尝试制定合适的升级策略 安装程序中的大多数文件都不会更改 并且当只有一两个文件发生更改时 我们不希望分发整个包 我研究了主要和次要升级 我的理解是 如果产品 ID 发生变化 只要
  • Wix 安装程序 - 根据属性创建文件夹层次结构

    我在用Wix 3 6 http wixtoolset org 创建一个设置 我仍在不断学习 那里的信息仍然分散 我正在等待我的 Wix 开发人员指南书到达 我目前有一个自定义 UI 对话框 用户可以在其中输入一些应用程序配置 该配置的一部分
  • 如何在 Wix 自定义对话框的文本框中输入值?

    我有一个带有类型编辑控件的 Wix 对话框 这是服务所依赖的服务器的 uri 如何在输入值之前禁用 下一步 按钮 以下是我们曾经使用的一些 旧 生产代码的摘录
  • WIX 合并 C++ 运行时

    我已经合并了 msm 与 2015 crt
  • 从对话框调用 CustomAction 时出现 WiX 安装错误 2762

    我是初学者 开始学习WiX 我想在安装过程中捕获 验证和注册用户详细信息 我创建了一个对话框来捕获用户注册并在用户单击 下一步 后调用自定义操作 但在这里我收到安装程序错误 2762 虽然错误描述说 必须在 InstallInitializ
  • WiX Burn:从注册表读取 LaunchTarget

    我是 WiX 的新手 我试图让我的 Bootstrapper 在完成后启动我安装的应用程序 为了实现这一点 我正在使用
  • wix 3 安装程序:未解析的绑定时变量!(bind.fileVersion.Name.exe)

    我正在尝试使用 Wix3 中的绑定 bind fileVersion 即 3 11 1 由于某些原因 我收到以下错误消息 未解析的绑定时变量 bind fileVersion TestWix3 exe 我的目标是填写 产品 ID 行 特别是
  • wix 安装程序/创建网站并分配新的或现有的 Web 应用程序池

    我尝试使用 wix 安装创建一个新网站 没关系 没有问题 但我无法将新的或现有的网络应用程序池分配给新网站 iis website 标记不包含 WebAppPool 属性 我如何将网络应用程序池分配给网站 你可以在下面看到我的代码 感谢您的
  • 创建新用户并将其添加到管理员时出现权限错误

    我用 WiX 3 8 创建了一个设置项目 我想在其中创建一个新用户并将其添加到管理员组 但每次我的设置达到这一点时 我都会因为权限不足而收到错误 这有点奇怪 因为我的用户是虚拟机的管理员 我在虚拟机上测试设置 我能做些什么 这是 WXS 文
  • 让 WiX Bootstrapper 用于 .NET 4.0 的引导

    我一直在寻找让我的引导程序能够安装 NET 4 0 和我自己的应用程序 我查看了几个博客和教程 但无法让它发挥作用 我在 Stack Overflow 问题中读到在 WiX 中启动 调用引导程序 https stackoverflow co
  • 在 WiX 中轻量运行时,DefaultDir 无效

    我只是想做一个安装程序 将一些文件移动到程序文件中 设置开始菜单链接 并出现在要卸载的添加 删除程序中 目前我很乐意点击开始菜单链接 因为这看起来相对简单 需要注意的是 我特别希望可以通过脚本构建它without任何类型的全局安装 这意味着
  • 安装一系列嵌入式 MSI 软件包,每个软件包都使用嵌入式 UI - 显示通用进度条

    我正在使用 Windows Installer 4 5 新功能和 WiX 来生成MSI http en wikipedia org wiki Windows Installer包 我创建了一个 MSI 链安装 以便将其他 MSI 包的集合作
  • WiX Heat:预构建事件在构建服务器上过早触发

    我正在为我的 Visual Studio 解决方案收集一个目录 到目前为止 它在我的本地系统上运行可能是因为项目构建顺序得到了尊重 当我在构建服务器上运行安装程序时 它会找到正确的目录 但在构建安装文件时尚未创建该目录 它抛出一个HEAT5

随机推荐

  • Scala 方法和值名称

    为什么编译失败 scala gt val a true
  • 寻找一种重构 D3.js 风格的方法链接模式的方法

    在学习 D3 js 时 我遇到了博客文章 http bost ocks org mike chart 解释其可重用代码单元背后的主要设计模式 我复制了下面的相关代码 下面呈现的模式的方式正是在 D3 代码库和插件中使用的方式 example
  • 如何测试我的 Redis 缓存是否正常工作?

    我已经安装了 django redis cache 和 redis py 我遵循了 Django 的缓存文档 据我所知 以下设置就是我所需要的 但我如何判断它是否正常工作 设置 py CACHES default BACKEND redis
  • 有没有办法制作用于开发的 firebase 身份验证令牌?

    背景 我正在构建一个 React Native 应用程序 它将数据发布到节点服务器 然后通过管理 Firebase 库将数据发布到 Firebase 为了发布数据 我完全绕过应用程序并使用postman https www getpostm
  • 使用 Chudnovsky 算法计算 pi 时出错 - Java

    我一直在尝试编写一个简单的程序来使用 Chudnovsky 算法计算 pi 但是我不断得到错误的值输出 我编写的最新代码如下并输出 9 6427156192980758374488232782187800865411623432530844
  • WebBrowser 控件和 JavaScript 错误

    当我使用浏览器 ie9 访问该页面时 浏览器渲染正常 当我使用 WebBrowser 控件时 出现 JavaScript 错误 我知道我可以抑制脚本错误 但我希望它们正确运行 因为它们会影响页面的渲染和功能 我怎么解决这个问题 我可以将 I
  • 如何在C++控制台中删除已写入的字符

    我正在尝试编写一个 C 程序来读取密码 我编写了程序来计算 不是我写的字符 但我的问题是当我想删除字符时 因为它们是错误的 Example 我的固定密码是12345如果我输入1235该程序将显示 我必须删除最后一个字符 将其从字符串中删除很
  • 谷歌云sftp的权限

    我正在使用 wordpress 和 google cloud 并将其设置为 sftp 连接 文件夹的权限是755 文件的权限是644 即使我已经将Cloud API访问范围更改为 允许完全连接 当我尝试通过 WordPress 后端添加插件
  • 使用 git-svn 时模拟 subwcrev

    我使用 git svn 与包含一些 C 项目的现有 SVN 存储库进行交互 subwcrev exe 用作预构建事件来更新 C 标头 svnversion h 中的某些字符串 这些字符串被硬编译以形成生成的二进制文件的一些版本信息 由于 s
  • 如何在 R 中按字符变量的字母顺序对数据框进行排序?

    我想按 R 中字符变量的字母顺序对数据框进行排序 我尝试使用order 函数 但它将我的数据框转换为列表 有人知道吗 好吧 我这里没有问题 df lt data frame v 1 5 x sample LETTERS 1 5 5 df v
  • 我可以用 SASS \ Compass 计算和使用元素高度吗

    我在 RoR 项目中使用 sass 和 compass 我需要分配给top元素的 CSS 属性值 即元素高度除以 2 我可以用 SASS Compass 来做吗 你似乎已经得到了XY问题 https meta stackexchange c
  • 无法删除 windows 对象的事件侦听器

    我在尝试删除事件监听器时遇到了很多麻烦 我创建了一个非常依赖 JavaScript 的网站 当您在网站上导航时 它基本上是动态加载元素 而无需使用模板文字刷新页面 有时我必须加载内容并添加无限滚动 但也能够再次删除该事件 这是我用来处理滚动
  • MATLAB:生成给定三种颜色的颜色图

    我正在尝试在 MATLAB 中生成给定三种颜色 最高值 零值和最低值 的颜色图 我的思维过程是从最高端到中间循环 并将每个步骤存储到一个 3xN 第一列是 R 第二列是 G 第三列是 B 矩阵 所以我正在使用 fade from high
  • 谷歌地图动画符号(到达路径的目的地点后停止图标)

    我正在做一个学校项目 我正在使用 Google Map API API 很棒 但我需要一些代码方面的帮助 到达目的地后 我希望图标保留在那里 而不应该再次重复整个路径 function initMap var map new google
  • Java Paint 组件转换为位图

    我需要在位图中绘制组件及其所有子组件的内容 如果我想绘制整个组件 以下代码可以完美运行 public void printComponent Component c String format String filename throws
  • 使用 py2exe 在 .exe 中嵌入图标,在 Vista 中可见?

    我一直在尝试使用 py2exe 将图标 ico 嵌入到我的 编译 exe 中 Py2Exe 确实有一种嵌入图标的方法 windows script MyScript py icon resources 1 MyIcon ico 这就是我正在
  • 如何使用 jquery load 方法将文件的内容加载到变量中?

    如何使用 jQuery 将文件内容加载到变量而不是 DOM 中 load method 例如 logList load logFile function response 而不是将文件加载到 logListDOM 元素 我希望将其加载到变量
  • Gevent被flask阻塞甚至使用猴子补丁

    我正在使用flask gevent来构建我的服务器 但是名为 getall 的gevent被flask阻止 因此 getall 函数无法在这段代码中打印消息 猴子补丁正在使用中 import time import WSGICopyBody
  • 安装MySQLdb(对于python)作为非压缩的egg

    安装说明是 python setup py build sudo python setup py install or su first 这给了我一个 egg 文件 如何告诉安装程序将文件转储为普通的未压缩库 Thanks 好吧 我不想回答
  • WiX Burn:从注册表读取 LaunchTarget

    我是 WiX 的新手 我试图让我的 Bootstrapper 在完成后启动我安装的应用程序 为了实现这一点 我正在使用