WiX - 如何有条件地设置属性

时间:2012-08-14 07:05:33

标签: wix

  

可能重复:
  Wix - change the installation folder based on privilege

当我试图在How do I get different registry keys for allusers and single user解决我的问题时出现了这个问题。

基本上我要做的是:

if ALLUSERS=1 then
   set InstallDir to Property1
else 
   set InstallDir to Property2

有人知道这样做吗?

2 个答案:

答案 0 :(得分:6)

好的,刚刚结束。我的wxs看起来像:

<CustomAction Id="PerUserInstall"    Property="InstallDir" Value="[INSTALLDIR1]" Execute="immediate" />
<CustomAction Id="PerMachineInstall" Property="InstallDir" Value="[INSTALLDIR2]" Execute="immediate" /> 
<InstallExecuteSequence>
    <Custom Action="PerUserInstall"    After="AppSearch">ALLUSERS="" OR (ALLUSERS=2 AND (NOT Privileged))</Custom>      
    <Custom Action="PerMachineInstall" After="AppSearch">ALLUSERS=1  OR (ALLUSERS=2 AND Privileged)</Custom>
</InstallExecuteSequence>

感谢@shambulator的链接。请注意,我使用After="AppSearch"而不是Before="CostFinalize",因为这会在注册表搜索后立即执行操作。

答案 1 :(得分:3)

许多WiX元素都将条件作为内部文本。由于它是XML,因此您经常需要转义特殊字符。这是指向条件如何工作的指针:

Conditional Statement Syntax

另外,我不确定为什么你有INSTALLDIR1和INSTALLDIR2。没有看到你的其余代码,我不得不说你没有正确地去做。您应该有一个INSTALLDIR,然后根据每个用户或每台机器将其设置到不同的位置。这是一篇关于这个主题的好博客文章:

Authoring a single package for Per-User or Per-Machine Installation context in Windows 7

就个人而言,我很少为每个用户安装而烦恼。除了“病毒”(不是病毒,而是通过社交媒体向非私人用户传播)应用程序之外,它们是一种毫无价值的痛苦。