为了账号安全,请及时绑定邮箱和手机立即绑定

Wix Installer:在命令行执行MSIEXEC管理员安装时设置组件条件属性

Wix Installer:在命令行执行MSIEXEC管理员安装时设置组件条件属性

我们的产品有三种类型/口味,但是只有一种用WiX编写的MSI。在构建安装程序时,我们通过定义的常量传递风味:Call MSBUILD.bat ..\MSIs\CoreProduct\OurProduct.sln /p:DefineConstants="FLAVOUR=%_Flavour%"并在Visual Studio中的“构建”->“将预处理器变量定义为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”的文件。这一切都按预期进行,并且已经完成了多年!但是现在,我们有了产品的Web版本,我们需要一个zip文件来包含每种风味将安装的文件夹结构和文件。我发现您可以使用MSIEXEC和/ a参数在命令行上运行msi,然后它将重定向所有本应安装到文件夹中的内容,并认为这正是我想要的...但是a,它无法正常工作预期的。似乎正在运行MSI,然后将文件提取到目标文件夹中,但是它忽略了这种风格,因此最终将“ ClientListView Lite.r5m”和“ ClientListView 200.r5m”文件提取到文件夹; 这显然不是我想要的。阅读有关MSIEXEC的文档后,似乎可以传递Public属性的值,例如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>但是尽管编译正常,但可以通过以下方式运行它:msiexec /a OurProduct.msi /qb PRODTYPE=200 TARGETDIR="C:\InstalledFiles200"仍然提取200和LITE口味的两个文件,而我只想提取200个。因此,我是在尝试做一些不可能的事情...还是我在做错什么-感激不尽的帮助,因为可以在批处理文件中模仿该过程来创建我的zip;将是可怕的!
查看完整描述

3 回答

  • 3 回答
  • 0 关注
  • 695 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信