![]() |
1
5
您的预处理器使用
我半途而废,建议使用
预处理器构造
(
在你的情况下,我可能遗漏了一些东西,但我不知道
设置风格当我需要创建不同的 设置风格 或 产品版本 具体如下:
实际使用情况我更喜欢尽可能少的设置风格 ,但大多数时候,我最终使用预处理器构造为 不同语言版本 (英语、德语、俄语)以及 不同的产品版本 (企业、专业、标准)。我通常将它们都设置为共享一个升级代码,而不能并排安装。 我觉得单个MSI可以获得更多的QA资源,因此可以更好地进行测试。 然而,如果设置非常大,这种单一的MSI方法通常会崩溃——在这种情况下,我喜欢将它们拆分。我还喜欢为每种语言分别设置 for business- and real-world practical reasons explained here 。实践和法律要求(许可)也使得必须编译同一MSI设置的特殊版本。我还被要求为 OEM供应商 。 现在有一个令人惊讶的结论 (您从未要求:-):综上所述,在一个理想的世界中,我喜欢安装所有功能,而不需要任何技术上的麻烦,并使用串行键来确定应用程序中应该激活哪些应用程序功能和模块。我还喜欢将串行密钥验证放在应用程序中,而不是放在设置中。 原因 ? 我希望设置尽可能原始,以确保应用程序正确安装,而不会出现高部署错误百分比。因此,我寻求在部署中消除复杂性,以确保减少部署支持问题。 可靠的部署对产品的成功至关重要 。安装后,您的应用程序可以在更可调试和可预测的环境中启动(无条件、模拟或排序问题),并以交互方式和有意义的方式向用户报告任何错误,而且他们可以致电支持部门,希望成功解决任何问题,而不是安装程序突然出现神秘的非交互错误消息(在系统的事件日志中)。 一旦您获得了一个好的、简单的部署解决方案,您作为发布经理和安装开发人员的工作应该扩展到处理应用程序的启动序列,文件配置和总体配置,以及我认为您可能要添加到应用程序中的支持和调试功能(应用程序自检、日志记录和自动收集要发送给支持人员的信息)。尝试扩展您对应用程序本身的责任和影响力,以保持部署“尽可能原始”。从长远来看,任何可以在应用程序中而不是在设置中进行编码的内容都将更加可靠(并且更容易调试)。
回到现实中
:对于真正的部署,您将通过缓慢的网络共享获得一堆带有不规则版本控制方案的文件,其中包含一堆不连贯的指令,这些指令来自离岸开发人员,按小时付费(您可以肯定他也感到痛苦:-))。他们会对你的设置提出一些部分疯狂的要求,要求你施展魔法来掩盖他们不太理想的设计(这是他们花钱制作的)。这不是咆哮,这是现实——很遗憾地说(
好吧,这是一个咆哮
)。我们必须努力改进应用程序的总体设计,以使部署更不容易出错。魔法确实可以在设置中完成,但它会触发更高的部署错误百分比,因为
the unavoidable and unruly complexity of deployment
(最重要的是:
总的观点是显而易见的: 我们无法解释这些未知因素——垃圾输入、垃圾输出(听起来很抱歉)——每次部署时都会有一个错误百分比,即使对于完美的包也是如此 。确保抓住所有可用的 总是有价值的QA人员 并教他们安装测试(测试所有安装模式,测试卸载和与其他应用程序的交互,测试真实世界的升级场景,测试特定的高级安装功能,如许可证检查等)。获得你能得到的所有帮助,并重视他们的贡献。如果没有其他,作为共犯:-)。严肃地说:作为发布经理和安装开发人员,我最大的疏忽就是未能有效地利用可用的QA资源并帮助培训他们进行部署测试。这是一个安全的假设,你很快就会欠你的QA人员一瓶霍尔卡,或者绿茶或Rooibos茶,这取决于你在世界上的位置:-)。 预处理器构造
我可能会使用
预处理器构造
除了使用包含文件,您还可以在主源代码中内联执行此操作(这可能就是您所做的):
在上述选项中,我更愿意将特定于版本的组件保存在一个单独的包含文件中(第一个选项),这样WiX源中的“线噪声”就会更少(预处理器构造的重复次数更少)。
include文件基本上就是WiX-XML文件,在编译时就像C++头文件一样被包含到父WiX-XML文件中。
正如Phil所说,我会为不同的版本使用不同的功能名称,所以您可以定义一个功能
还要注意WiX的概念 the fragment element 。本质上是一种交叉引用WiX源文件中内容的方法。 An example here 。 我应该提到的是 merge modules 在MSI中,提供了一种在不同设置之间共享组件的不同方法,但我更喜欢包含文件的方法。合并模块在某种程度上感觉像COM对象(二进制blob作为一个版本化的整体包含),而包含文件似乎更具动态性,因为您可以为每个构建获取链接到的最新文件,而无需任何合并模块重建和版本化。毫无疑问,有些人会发现这是非常错误的。 |
![]() |
2
3
msiexec命令行中的/a开关不是通常意义上的安装。它实际上只是将文件解包到某个位置。如果要进行实际安装,必须使用/i或双击MSI文件。这将为您提供一个正确的完整安装,并在Programs&功能等。 安装内容的选择通常通过将安装程序划分为多个功能来处理,每个功能都包含一组包含所需功能的组件。在WiX UI中,您可以获得一个对话框来选择功能,维护模式将允许您返回并更改它们。在命令行安装中,您只需说/i[msi file]ADDLOCAL=Feature1、Feature2等等。如果您真的想使用“flavor”,那么在内部您可以将其转换为ADDLOCAL列表。 |
![]() |
3
0
谢谢你提供的信息,但我想你没有理解我想要实现的目标;我不想通过/I运行安装程序,因为正如您所说,这实际上会安装文件并更改注册表等。我想做的是运行安装程序两次,一次是针对Flavor 200,然后再次针对Flavor Lite;因此,如果我用/I运行它,我最终会得到两个包含“将”安装的文件的文件夹。显然,我不能用/I运行两次,因为第二次运行它时,它会卸载第一个。 无论如何,我发现在管理员“安装”期间忽略了组件内的条件,而?如果语句不会被忽略-不知道为什么会这样,但我现在已经删除了所有条件语句,并将它们替换为IF语句-所以现在我可以做我想做的事情-使用/a运行两次,每个文件夹都将包含该风格特有的文件。 |
![]() |
Nemo · 安装项目不会调用所有。dll程序集文件并引发异常 7 年前 |
![]() |
nano · 安装程序在安装此包时遇到意外错误-。错误代码2896 7 年前 |
![]() |
crocodayl · Wix卸载快捷方式无法完全删除应用 7 年前 |