3

我正在使用 Wix 3.11 并尝试有条件地设置我的包的安装权限。

我想做的是:

<?if Privileged = 0 ?>
  <Package InstallerVersion="405" Compressed="yes" InstallScope="perUser" InstallPrivileges="limited" />
<?else ?>
  <Package InstallerVersion="405" Compressed="yes" InstallScope="perMachine" InstallPrivileges="elevated" />
<?endif ?>

但是,这不起作用。安装时,总是选择具有提升权限的那个。
另外,我尝试在 .wxi 文件中创建一个变量并将其设置为:

.wxi 文件:

<?if Privileged = 0 ?>
  <?define myScope = "perUser" ?>
  <?define myPrivileges = "limited" ?>
<?else?>
  <?define myScope = "perMachine" ?>
  <?define myPrivileges = "elevated" ?>
<?endif?>

.wxs 文件:

<Package InstallerVersion="405" Compressed="yes" InstallScope="$(var.myScope)" InstallPrivileges="$(var.myPrivileges)" />

但同样的情况再次发生:总是选择提升的特权。
我在非管理员用户的 2 台不同的机器上进行了测试。

我在互联网上没有找到任何解决方案,所以我想知道:是否可以有条件地设置一个包?

谢谢你的时间。

编辑

我找到了AdminUser属性,这似乎正是我所需要的。我相应地更改了我的 wxs 文件以设置 AdminUser:

<Package InstallerVersion="500" Compressed="yes" />
<SetProperty Id="MSIUSEREALADMINDETECTION" Value="1" Sequence="first"/>    
<SetProperty Id="ALLUSERS" Value="2" Sequence="first"/>
<SetProperty Id="MSIINSTALLPERUSER" Value="1" Sequence="first"> <![CDATA[NOT AdminUser]]> </SetProperty>

在阅读安装日志文件时,我注意到在 MSIUSEREALADMINDETECTION 之前设置了 AdminUser,并且设置 MSIUSEREALADMINDETECTION 不会触发 AdminUser 的重置。

我将我的 SetProperties 安排到我能找到的最先操作,即“FindRelatedProducts”,但是 AdminUser 甚至在此之前设置(实际上在 installExecuteSequence 和 installUISequence 之前),我无法首先设置 MSIUSEREALADMINDETECTION。

我相信没有办法确定您是在管理员还是标准会话下运行安装。
如果有人知道解决方案,请随时提出建议。

感谢 Michael 和 Brian 抽出宝贵时间。

4

0 回答 0