我有一个 WIX MSI 项目,用于我们产品的不同风格,所以我有各种声明来根据产品风格/类型做事情,并且知道一切似乎都按预期工作。但现在已经决定其中一种口味需要安装在不同的位置(实际上是安装到另一家公司的安装文件夹中 - 由于我们的应用程序不是 GAC 的),但我现在正在尝试一些“有趣”来实现这一点。
我有一个目录结构,类似于:
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder">
<Directory Id="COMPANYFOLDER" Name="FirstCompany">
<Directory Id="APPLICATIONFOLDER" Name="FirstProduct" >
就目前而言,这很好 - 它将安装到 Program Files\FirstCompany\FirstProduct 中。
但是我有一个名为 FLAVOR 的预处理器变量,它可以是 1 或 2。如果它是 1,那么我想安装到上述结构中;但如果它是 2 我想安装到 Program Files\SecondCompany\SecondProduct
基本上如果它是 2 - 那么我们实际上安装到另一家公司的安装位置。
我已经尝试了各种方法来实现这一点,例如:
<?if $(var.FLAVOUR)=1?>
<SetDirectory Id="COMPANYFOLDER" Value="FirstCompany" Sequence="execute"/>
<SetDirectory Id="APPLICATIONFOLDER" Value="FirstProduct" Sequence="execute"/>
<?else?>
<SetDirectory Id="COMPANYFOLDER" Value="SecondCompany" Sequence="execute"/>
<SetDirectory Id="APPLICATIONFOLDER" Value="SecondProduct" Sequence="execute"/>
<?endif?
这是在与设置目录结构的同一片段中完成的 - 但这不起作用。
也试过:
<CustomAction Id="SetCompanyDirToFirst"
Directory="COMPANYFOLDER"
Value="FirstCompany" />
<InstallExecuteSequence>
<Custom Action="SetCompanyDirToFirst" Before="InstallFiles">$(var.FLAVOUR)=1</Custom>
....
</InstallExecuteSequence>
尽管当我运行安装程序时这些方法编译正常(顺便说一句 Wix 3.6),但它会抱怨诸如“无法访问网络位置 XXXXXXXX”之类的错误,其中 XXXXXX 是 APPLICATIONFOLDER 中的值。
我现在已经达到(不需要太多)我的 Wix 技能的极限,所以希望这里的人能有所启发?
干杯,
克里斯。