用于多个项目的通用 Wix 安装程序
Posted
技术标签:
【中文标题】用于多个项目的通用 Wix 安装程序【英文标题】:Generic Wix Installer for multiple projects 【发布时间】:2014-03-31 18:39:09 【问题描述】:我是 Wix 的新手,所以请原谅我可能使用不正确的任何术语。
我有一个大型解决方案,其中包含许多项目,其中一些成为可安装的服务、可执行文件等等。在将具有安装程序的项目的构建后事件中,我运行以下命令以生成包含安装程序所需的所有文件的片段。
"C:\Program Files (x86)\WiX Toolset v3.8\bin\heat.exe" dir $(TargetDir) -ag -cg harvestedComponents -out $(TargetDir)$(ProjectName).wxs
我想创建一个具有组件引用占位符的单个 Wix 设置项目,然后我可以将其链接到片段。这样我可以重用一个安装项目的功能,而不需要为我拥有的每个可安装项目创建一个安装项目。从那里我会有第二个构建事件,它将链接/编译片段和项目,同时将标志传递给可以打开/关闭安装功能的通用安装程序项目,例如添加事件源、不同的自定义操作等。
所以我的问题是如何从可执行项目的构建后事件将片段与通用 Wix 项目链接/编译。我猜它看起来像:
Candle/Light.exe fragment.wxs generic.wxs -eventLog true -customAction1 true -msiName MyInstaller.msi
我将在通用文件中使用 eventLog customAction1 的值来启用/禁用安装功能。
很抱歉造成混乱,希望这是可能的。
【问题讨论】:
不要忘记每个安装程序都需要自己的 UpgradeCode 和 Version。 【参考方案1】:如果我理解正确,您想在通用 WiX 源文件中引用由 heat ($(TargetDir)$(ProjectName).wxs
) 创建的片段吗?
如果是这种情况,您只需在您的Feature
-元素下方添加一个ComponentGroupRef
-标签(而不是您通常使用的ComponentRef
-元素)。作为 elemenet 的 Id
,您必须使用您在 heat-commandline 中使用的 ComponentGroup
的名称,在您的示例中为 harvestedComponents
。例如
<Feature Id="MyFeature" ...>
...
<ComponentRef Id="aNormalComponentFromTheCurrentFile" ... />
...
<ComponentGroupRef Id="harvestedComponents" />
</Feature>
还是我错过了重点?
【讨论】:
是的,这回答了部分问题,谢谢。但我也试图弄清楚如何使用蜡烛或灯光或其他东西链接这两个文件,并传递命令行参数以评估我的通用文件中的条件。在加热后运行的东西看起来像“candle/light.exe fragment.wxs generic.wxs -eventLog true -custAction1 true”,这可能是两个不同的命令,不确定。 抱歉回复晚了。你的意思是在命令行上设置属性?如果是这样,那么您始终可以在源文件中设置一个 WiX 变量(例如 $(wix.Eventlog)),然后使用 -d以上是关于用于多个项目的通用 Wix 安装程序的主要内容,如果未能解决你的问题,请参考以下文章