问题标签 [burn]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
wix - 以其他一些子 MSI 作为先决条件创建 MSI 的最佳实践是什么?
目前,我们使用Inno Setup作为引导程序来安装 MSI 先决条件。维护设置有点复杂。我找到了刻录工具,它可以帮助我们通过单一设置来安装我们需要的任何东西来解决这个问题。我找不到此工具的文档或示例。有人对此有想法吗?还是有替代解决方案?
我正在为我们现在使用 ISS 引导程序执行的操作寻找替代解决方案:
- 提取文件(主要设置,先决条件设置)
- 需要确保先决条件状态并按需安装。
- 开始主安装。
wix - 在安装之前获取功能安装成本
我们正在为我们的安装制作一个自定义的助推器/外部 UI。
我们希望提供一个“自定义安装”对话框(如在 MSI 中)以允许用户选择他们想要安装或删除的功能。
目前,我们能够从 MSI 数据库本身(通过在Feature
表上运行 SQL 查询)读取特性(以及其他特性细节,如描述)。
但是,我们还想显示安装功能的成本。Windows Installer 的“自定义安装”对话框能够做到这一点。
我认为我们可以通过执行以下操作来模仿行为:
- 选择一个
Feature
你想得到的成本 - 使用该
FeatureComponents
表,Component
从 1 获取与该功能相关的 - 使用该
File
表,添加FileSize
与 2 中标识的组件关联的文件 - 3 的总和是功能安装的成本
问题:
- 是否有 API(来自 DTF 或 MSI.DLL)我们可以用来在安装之前获取功能的成本?(DTF中有一个
FeatureInfo.GetCost
方法,但不能直接使用,必须先安装产品才能调用FeatureInfo.GetCost
fromProductInstallation
) - 如果没有 API,上面给出的过程是否适合或正确计算功能安装的成本?
谢谢!:)
更新#1
我认为有一种方法可以在开始安装之前通过 API 获得功能安装的成本。我是这样做的:
调用info.name
成功返回特征的名称。但是,调用info.GetCost
将返回InvalidHandlerException
一条消息:“选择管理器未初始化”。
这是我目前所在的位置。
更新#2:
我得到了,InvalidHandlerException
因为我在调用之前没有调用所需的文件成本计算例程info.GetCost
。这是我修改后的代码:
我不再收到 InvalidHandlerException,但返回的所有文件成本都是 -1099511627776。
wix - MSI/WiX - 在多实例转换期间分配组件 GUID
使用 WiX 3.5,我有一个带有实例转换的 MSI,允许我将软件安装在具有不同产品名称的同一台机器上。为此,我在 .wxs 文件中有条件定义的产品 ID 和名称的“硬编码”列表。但是,我只有一个包含文件和非文件资源的 Feature-ComponentRef 定义。
安装似乎工作正常,但卸载实例演示了这两个来源中提到的行为:
http://msdn.microsoft.com/en-us/library/aa367797(v=VS.85).aspx
和
具体来说,在我的应用程序的最后一个实例中,没有任何非文件资源(在本例中为注册表项)被卸载。(即,如果我按以下顺序卸载:instance1、instance2 和instance3 - 仅删除instance3 的非文件资源。
我假设这与非文件组件没有唯一的 GUID 有关(而这不是文件组件的问题)
所以,我想知道是否一种有效的方法是定义一个具有一个产品 ID、名称和一组功能的单个 .wxs 文件,但是让一个自定义引导程序为产品和非文件组件生成新的 GUID,然后将其插入在运行时进入 MSI 数据库?即,当需要卸载或更新时,我会在注册表中查询已安装的实例并检索它们的 GUID。
这将允许在运行时创建实例,而不是预先在 .wxs 中硬编码,并且可以干净地卸载。
那有意义吗?Burn会让一切变得更好吗?:)
user-interface - WiX bundle UI - 可选择的产品树
我最近将 7 个应用程序安装程序迁移到 WiX。旧的安装程序(10 多年前的技术,UI 看起来像 Windows 3.1 设置)在其捆绑安装程序中已经有一个产品树,我可以在其中选择要安装的产品。
我已经到了一个工作包安装程序的地步,所有 7 种产品都可以正常安装。但我需要能够从整个捆绑包中选择要安装的产品。
我知道这是一个引导程序 UI 问题。如果我想要这棵树,我需要用 C# 编写自己的引导程序。不幸的是,这似乎是一个比整个事情价值更大的项目。所以我的问题是:
- 有没有一种简单的方法可以在引导程序中将多个 MSI 安装程序捆绑在一起,一个接一个地安装它们,并且有一个可选的产品树?(我需要一个免费的产品。)
- 有没有人有这样一个 WiX 引导程序的工作示例代码?
提前致谢!
wix - 如何使用 Burn 在 WiX 中部署 Visual C++ 可再发行组件
我们刚刚将安装程序从WiX 2.x 迁移到 WiX 3.6 并开始使用Burn。以前,我们通过将 .msm 文件包含到我们的MSI来安装Visual C++可再发行组件。这些文件始终与我们用于构建产品的文件同步(Microsoft 经常更新它们以包含安全修复程序)。C:\Program Files\Common Files\Merge Modules
现在,我们希望仅在需要时使用 Burn 框架下载 Visual C++ 可再发行组件。但是,Burn 没有定义MsmPackage
要放置在里面的元素Chain
。
使用 Burn 部署 Visual C++ 可再发行组件的最佳方法是什么?
wix - Wix:如何在刻录管理的 UX 中显示 MSI 包的大小
我有一个 Wix 3.6 托管引导程序,用户可以在其中选择单独的包来下载和安装。我想显示每个包的下载大小。如何访问 中每个包的文件大小Bundle
?
我猜这个信息在 Wix 框架中的某个地方可用(因为文件哈希用于验证下载的文件),但我没有找到它。
我有一个解决方法的想法,但对我来说这将是更多的实现:
wxs
以编程方式生成一个文件,其中包含Variable
包含包文件大小的元素。这些变量将由引导程序读取。
wix - 自定义 WiX Burn 引导程序用户界面?
我主要使用 WiX 3.6 创建一个安装包,以便我可以利用Burn引导功能。到目前为止,我已经将几个 MSI 软件包捆绑在一起,它们将与内置的引导程序应用程序 ( WixStandardBootstrapperApplication.RtfLicense
) 一起安装。
我读过 Burn 允许通过指定 custom 来替换默认的引导程序应用程序UX.dll
,但我还没有找到任何描述自定义ux.dll
构造方式的资源(即,它如何与 Burn 引擎集成,什么我使用什么技术,我应该实现什么接口,等等)。
我的目标是创建一个品牌引导程序,它可以从用户那里收集任意信息并将该信息传递到各种捆绑的 MSI 文件、EXE 文件等。
所以我真的有两个问题:
- 默认引导程序应用程序的可定制程度如何?
- 是否有任何可用资源描述如何构建自定义
UX.dll
?
wix - WiX 刻录自定义 UI
我正在尝试为WiX和 Burn 创建自定义 UI。我遵循了一些我找到的指南,到目前为止,我有一个项目,它继承自 BootstrapperApplication。
在 AssemblyInfo.cs 中:
然后在我的 Bootstrapper 项目中,我有以下内容。
我添加了 MyBA.BootstrapperCore.config
但是,每当我为引导程序运行 Setup.exe 时,我都会短暂地出现闪屏,但没有别的。如果我在日志中查看 %TEMP% ,则有以下内容
为什么会发生这种情况以及为什么会发生上述错误?