我正在了解Wix安装程序,并要求msi安装多次。
我的问题是如何将WWTagNet.Service中的INSTALLFOLDER更改为WWTagNet.Service1,WWTagNet.Service2,WWTagNet.Service3,而无需在msiexec的命令行中指定InstallDir?
我使用了InstanceTransforms元素并定义了三个实例,并添加了MultiInstance =" yes"一些组件。
我想我认为我指定为INSTALLFOLDER的目录会根据InstanceID自动更改。
我想将InstanceID附加到INSTALLFOLDER,而不是指定为msiexec的命令行。
我已尝试使用以下内容,但似乎无效。
<SetProperty Id="INSTALLFOLDER" After="LaunchConditions" Sequence="first" Value="[TARGETDIR][ProgramFilesFolder][Company][INSTANCEID]"><![CDATA[NOT Installed]]></SetProperty>
这些是我的product.wxs文件的相关部分。
<Property Id="INSTANCEID" Value="0" />
<InstanceTransforms Property="INSTANCEID">
<Instance Id="I01" ProductCode="a4d890ed-e624-438e-8fd9-938cd7aa06be" ProductName="Service1" />
<Instance Id="I02" ProductCode="17c81aa7-0524-44f7-a2ea-3a618c9ceb6b" ProductName="Service2" />
<Instance Id="I03" ProductCode="8d858d7c-f66c-4ccb-9427-77b5c426c3e1" ProductName="Service3" />
</InstanceTransforms>
<Feature Id="ProductFeature" Title="WWTagNet.Service" Level="1">
<ComponentGroupRef Id="ProductComponents" />
<ComponentGroupRef Id="Modules" />
</Feature>
<Fragment>
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder">
<Directory Id="COMPANYFOLDER" Name="W W Wood Products Inc">
<Directory Id="INSTALLFOLDER" Name="WWTagNet.Service">
<Directory Id="MODULESFOLDER" Name="Modules" />
</Directory>
</Directory>
</Directory>
</Directory>
</Fragment>
<Fragment>
<ComponentGroup Id="Modules" Directory="MODULESFOLDER">
<!--Install some files-->
</ComponentGroup>
<ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
<!--Install some files-->
</ComponentGroup>
</Fragment>
答案 0 :(得分:1)
以下似乎对我有用。猜猜属性需要一个默认值,然后可以在LaunchConditions
期间更改<Property Id="COMPANYFOLDER" Value="W W Wood Products Inc"/>
<Property Id="INSTALLERFOLDER" Value="WWTagNet.Service"/>
<SetProperty Id="COMPANYFOLDER" After="LaunchConditions" Value="[ProgramFilesFolder]\W W Wood Products Inc"/>
<SetProperty Id="INSTALLFOLDER" After="LaunchConditions" Value="[COMPANYFOLDER]\[ProductName]"/>