我正在使用 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 抽出宝贵时间。