问题标签 [wixlib]
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 - WiX 和共享的版本化组件
这必须是一个普遍的需求,但我在网上几乎找不到任何对它的引用......
我有一个产品,它有三组组件,一组安装在服务器上,一组安装在 Web 头上,一组安装在开发人员的机器上。所有三套都可以安装在一台机器上,并且应该和平共存。
正如我昨天所做的那样,每个组件都安装到不同的地方并且工作正常,但这只是暂时的,因为应该共享一些文件、gac'd 程序集和注册表设置。现在我已经从共享组件中创建了一个合并模块,并且这个新的合并模块方案在理想条件下的安装过程中运行良好,并且我已经对单个 msi 进行了重大升级。
问题是在安装 msi 期间,安装 msi 中的合并模块版本低于已安装版本(不同 msi)的版本 - 较新版本被旧版本覆盖!此外,在卸载三个 msis 中的任何一个时,即使其他已安装的组件仍在使用共享的东西,它也会被删除。
在大多数情况下,我理解为什么会出现这种行为,但我不明白我应该如何配置我的安装程序,以便可以共享这些组件,而无需为共享组件提供单独的安装程序。另外,我也不想要一个大的安装程序 - 这不会很好地扩展。
我想要的是三个安装程序包含合并模块中在构建时可用的任何最新版本的组件。在安装时,如果安装了较新版本的共享组件,请不要覆盖它们。在卸载(和升级)时,应该跟踪的引用计数将确定是否应该删除共享项目。
如果我只是遗漏了一些东西,这里是合并文件的重要部分:我的合并模块的版本号(“wxy”中的 y)随着每次构建而递增,包 ID 保持固定,并且每个组件都有Shared="yes"
(尽管我也试过没有这个)。
我已经开始在注册表中存储各种版本号,我想也许只有在注册表中的版本号不存在或更低的情况下,我才能有条件地安装合并模块功能。但是如文档所述,条件参数无法正确评估 wxyz 。然后文档建议 AppSearch,但 AppSearch RegistrySearch 只能检查是否存在,也不能比较版本号。显然 FileSearch 可以,但程序集文件版本号不会随着每次构建而增加。
而且我读到 MergeModules 有很多问题——也许就是这些——但 wixlibs 似乎也没有为这些问题提供任何解决方案。
那么合并模块版本控制的正确方法是什么???我在亚马逊上找到一本书,其中有一个名为“合并模块版本控制”的 TOC 条目,但该书已绝版。:-P
visual-studio - 我在 WiX 库项目中引用了一个 WiX 扩展——如何避免在使用这个 wixlib 的其他项目中引用这个扩展?
我在 WiX 库项目中引用了 WiX 扩展。这个 WiX 库项目本身被我的主要 WiX MSI 项目引用。为什么主项目还必须引用 WiX 扩展,即使它并不直接需要它?
我想让我的 wixlib 尽可能自包含,以便其他使用它们的项目不需要了解它们的内部工作原理。
我正在使用 WiX (3.0.x) 的最新稳定版本。
wix - 如何在两个 WiX 项目中共享一个 WiX 片段?
我们在 SomeDialog.wxs 文件中有一个 WiX 片段,它会提示用户输入一些信息。它在 InstallerUI.wxs 文件中控制对话框顺序的另一个片段中被引用。当然,Product.wxs 是我们的主文件。效果很好。
现在我有第二个 Visual Studio 2008 Wix 3.0 项目,用于另一个应用程序的 .MSI,它需要向用户询问相同的信息。我似乎无法找出共享文件的最佳方式,以便更改请求的信息将导致两个 .MSI 都获得新行为。
老实说,我无法判断合并模块、.wsi(包含)或 .wixlib 是否是正确的解决方案。我本来希望找到一个这样做的人的简单例子,但到目前为止我失败了。
编辑: 基于Rob Mensching 的wixlib博客条目,wixlib 可能是答案,但我仍在寻找如何做到这一点的示例。
deployment - 当前用户的 MyDocuments,Wix 中的内置变量?
我需要安装一些文件到C:\Documents and Settings\currentUser\SomeFolder
. 我找不到一些内置函数/变量。
有人可以帮助/告诉我<DirectoryRef Id="TARGETDIR">
问题的结构或解决方案吗?
谢谢。
wix - 使用还愿时如何将额外的 WXS 文件传递给蜡烛?
使用 Votive 从 Visual Studio 构建 WIXLIB 时,如何指定在何处查找不属于 Visual Studio 项目(也不属于引用项目)的其他 WXS 文件?
我不想将 WXS 文件添加到项目中,因为它们是heat.exe
在构建过程中更新的,因此需要保持可编辑状态(即,它们不能与项目的其余部分一起添加到源代码控制中)。
wix - 是否可以在 wixlib 中包含“源”文件?
是否可以在 wixlib 中包含“源”文件?
我有许多 c++ 解决方案,每个都包含一个或多个项目,以及一个 wixlib,其片段包含以下条目:
我想收集“foo.exe”并将其包含在 wixlib 中,然后创建一个 WiX 项目,将几个这样的 wixlib 链接在一起并生成一个 MSI。
我所做的阅读似乎暗示了 WiX3 和后来的支持这一点,并且该技术优于使用合并模块。
目前,我使用一个环境变量来描述二进制文件的路径,light.exe 在链接时使用它来定位文件。但是,它有以下缺点:
- 在 wixlibs 编译时间和将 wixlibs 链接到 MSI 之间更改的文件版本,以及
- 特定于用于构建 wixlib 的环境(例如:如果 wixlib 编译和链接发生在不同的机器上,则两者都需要构建所需的二进制文件)
visual-studio-2010 - 带有 Visual Studio 2010 的 WiX 3.0——没有用户界面库?
我以前使用过 Wix 来构建安装程序,非常棒!
我最近重新映像了我的机器,并且只安装了 Visual Studio 2010,因为我已经将我的所有项目都更新到了那个版本。
当我下载并安装 WiX 3.0 时,它抱怨不会安装 Votive,因为我没有安装 Visual Studio 2005 或 2008“或更高版本”。没关系,无论如何我都不使用 Votive(而且我不太明白 VS 2008 与此有什么关系,但无论如何......)
当我尝试使用 light.exe 链接我的 Wix 安装程序时,我收到一个链接错误,因为它找不到 UI wixlibs。搜索驱动器上的各个位置(常见文件、Wix 安装目录等),我找不到任何 wixlib 文件。
问题是我需要为 WiX UI 库找到单独的下载吗?如果有,在哪里?我在 Wix 网站上找不到任何有希望的链接。还是 UI 库以某种方式链接到 Votive 安装的问题?如果是这样,我如何将它们安装在只有 Visual Studio 2010 的系统上?
wix - WiX 替换对话框
如何替换一个标准对话框,例如 MaintenanceTypeDlg?
我有对 UIExtension.dll 的引用,当我将 MaintenanceTypeDlg.wxs 添加到我的项目时,我收到有关对话框重复的错误。
我可以在不删除引用并添加所有需要的 .wxs 文件的情况下替换单个标准对话框吗?
wix - 可以在 wixlib 中设置 WixUiBannerBmp 吗?
目前我正在尝试将 WixUIBannerBmp、WixUIDialogBmp 和 WixUILicenseRtf WixVariables 及其相应的二进制文件移动到 wixlib。不幸的是,在构建它时会忽略这些并使用默认值。
我的图书馆.wxs:
其中 rtf 和 bmp 文件包含在 wixlib 项目中,并且路径相对于 Library.wxs 文件。
任何人都知道为什么这不起作用?
谢谢
wix - 在 Wix 3.5 Wixlib 中覆盖横幅图像在实际 MSI 中不起作用
我正在使用几篇文章和其他问题来覆盖我在 20 多个其他安装程序中使用的二进制 wixlib 的横幅位图图像。这个库提供了我们自己的自定义 UI、一些自定义对话框、公共资源、二进制文件、自定义操作等。
这是我在 wixlib 中用于覆盖图像的代码:
但是当我在我的实际 MSI 项目中引用我的 wixlib 时,除了 UI 横幅图像覆盖(我的自定义对话框触发、进程正常、安装常见二进制文件等)之外,一切正常。我需要在我的二进制 wixlib 项目中做些什么来覆盖我自己的二进制 wixlib 中的 UIExtension.wixlib 默认图像吗?
我在这里看到了这个问题:Can WixUiBannerBmp is set in a wixlib? ,但是该问题的答案没有回答问题,它与图标直接相关,我不确定这个人使用的是二进制 wixlib(可重新分发)。我嵌入在 wixlib 中的添加/删除程序图标已经可以正常工作了。