【发布时间】:2018-03-23 12:45:04
【问题描述】:
我们的产品有三种类型/口味,但只有一种 MSI 是用 WiX 编写的。当我们构建安装程序时,我们通过定义的常量传递风味:
Call MSBUILD.bat ..\MSIs\CoreProduct\OurProduct.sln /p:DefineConstants="FLAVOUR=%_Flavour%"
并且常量是在 Visual Studio 中的 Build -> Define preprocessor variables as FLAVOUR=50 下设置的。构建过程,传入值 50、200 或 LITE 作为风味。
在 WiX 代码中,我们的组件有很多条件,根据风格告诉它要安装哪个文件;例如
<Component Id="cmp7F45920B1AA100729BAE37FC846B3FC5" Guid="*">
<File Id="fil238A776D9294E14671E012472F9F7196"
KeyPath="yes"
Source="$(var.MenusPath)\ClientListView 200.r5m"
<Condition>$(var.FLAVOUR)=200</Condition>
</Component>
<Component Id="cmp8BFF42B232724DC4BA5B8F87994DEF21" Guid="*">
<File Id="fil808D6428D67248DDB8CA65DBC5978283"
KeyPath="yes"
Source="$(var.MenusPath)\ClientListView Lite.r5m"
<Condition>$(var.FLAVOUR)=LITE</Condition>
</Component>
因此,如果 FLAVOR 为 LITE,上面的示例将安装一个名为“ClientListView Lite.r5m”的文件,如果 FLAVOR 为 200,它将安装一个名为“ClientListView 200.r5m”的文件。
这一切都按预期工作并且已经做了多年!
但是现在,我们有一个网络版本的产品,我们需要一个 zip 文件来包含文件夹结构和为每种口味安装的文件。我发现您可以使用 MSIEXEC 和 /a 参数在命令行运行 msi,然后将所有已安装的内容重定向到文件夹中,并认为这正是我想要的……但可惜它不能像我一样工作会预料到的。
它似乎在做的是运行 MSI 并将文件提取到目标文件夹中,但它忽略了味道,所以你最终得到了“ClientListView Lite.r5m”和“ClientListView 200.r5m”文件被提取到文件夹中;这显然不是我想要的。
阅读 MSIEXEC 上的文档后,您似乎可以传入公共属性的值,例如 msiexec.exe /a "C:\Example.msi" MY_PROP="myValue" - 所以我认为这可能对我有帮助;所以在我的 WiX 代码中我添加了以下行:
<Property Id='PRODTYPE' Value="$(var.FLAVOUR)"/>
然后将我的组件条件更改为:
<Component Id="cmp7F45920B1AA100729BAE37FC846B3FC5" Guid="*">
<File Id="fil238A776D9294E14671E012472F9F7196"
KeyPath="yes"
Source="$(var.MenusPath)\ClientListView 200.r5m"
<Condition><![CDATA[PRODTYPE=200]]></Condition>
</Component>
<Component Id="cmp8BFF42B232724DC4BA5B8F87994DEF21" Guid="*">
<File Id="fil808D6428D67248DDB8CA65DBC5978283"
KeyPath="yes"
Source="$(var.MenusPath)\ClientListView Lite.r5m"
<Condition><![CDATA[PRODTYPE=LITE]]></Condition>
</Component>
但虽然编译正常,但通过以下方式运行它:
msiexec /a OurProduct.msi /qb PRODTYPE=200 TARGETDIR="C:\InstalledFiles200"
仍然为 200 和 LITE 风格提取两个文件,而我只想要 200 的文件。
所以,我是在尝试做一些不可能的事情......还是我做错了什么 - 任何帮助都将不胜感激,因为可以替代在批处理文件中模仿该过程来创建我的 zip;会很可怕!!
干杯,
克里斯。
【问题讨论】:
标签: wix conditional-statements admin windows-installer