Windows Installer只是将我的安装更改为背后的ALLUSERS = 1

时间:2014-10-10 16:19:17

标签: windows-7 wix windows-installer wix3.8

我发现WiX 3.8和Windows Installer存在一个奇怪的问题。

我创建了一个Outlook插件,我希望没有管理员权限的最终用户能够在他们的计算机上安装。

因此,我仔细确认了

  • 在安装期间不要写入任何系统级目录(如C:\program files等)
  • 不写入任何系统级注册表项(如HKEY_LOCAL_MACHINE

在我的WiX脚本中,我确保设置ALLUSERS=0并将我找到的所有其他相关属性设置为perUserlimited

<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:netfx="http://schemas.microsoft.com/wix/NetFxExtension">
  <Product Id="*" Name="MyAddin" Language="1033" Version="1.0.0" 
           Manufacturer="Me" UpgradeCode="-some-guid-" Codepage="1252">
    <Package InstallerVersion="200" Compressed="yes" 
             InstallScope="perUser" 
             Description="yada yada" Manufacturer="Me" Languages="1033" SummaryCodepage="1252" 
             InstallPrivileges="limited" 
             Comments="yada yada" />
    <Property Id="ALLUSERS" Value="0"/>

我曾经想过会有用 - 但是在我的测试系统上,使用普通的标准用户帐户(没有管理员权限),我的安装失败了 - 有一个消息对话框告诉我没有足够的权限为所有用户安装。 ...

WTF?我特意想为这个*用户安装这个 - 而不是机器上的所有用户!

查看MSI日志,我看到了令人惊讶的事情:

  

MSI(c)(B0:B4)[18:08:08:543]:注意:1:2262 2:AdminProperties 3:-2147287038
  MSI(c)(B0:B4)[18:08:08:543]:机器策略值'AlwaysInstallElevated'为0
  MSI(c)(B0:B4)[18:08:08:543]:用户政策值'AlwaysInstallElevated'为0
  MSI(c)(B0:B4)[18:08:08:543]:使用用户权限运行产品'........':未分配。
  ...
  MSI(c)(B0:B4)[18:08:08:543]:物业变更:修改ALLUSERS属性。其当前值为“0”。它的新价值:'1'。

*为什么在地球上是Windows安装程序决定只将ALLUSERS属性更改为1?!?!?我从来没有告诉它!啧.......

有什么想法吗?思考?指针?

2 个答案:

答案 0 :(得分:11)

根据ALLUSERS的MSI SDK文档,创建每用户安装的正确方法是将ALLUSERS设置为“”(下面加粗的第二个子弹):

  • ALLUSERS属性值为1指定每台计算机的安装上下文。
  • 空字符串(“”)的ALLUSERS属性值指定每用户安装上下文。
  • 如果ALLUSERS属性的值设置为2,则Windows Installer始终将ALLUSERS属性的值重置为1并执行每台计算机的安装,或者将ALLUSERS属性的值重置为空字符串(“ “)并执行每用户安装。值ALLUSERS = 2使系统能够重置ALLUSERS的值和安装上下文,具体取决于用户的权限和Windows的版本。

值“0”未定义,因此您可以获得Windows Installer选择的任何未定义行为(选择以下其中一项):周/月/年/操作系统/ Service Pack。

有关此故事背后的详细信息,请参阅this blog entry

答案 1 :(得分:1)

您的InstallScope(和InstallPrivileges)应该足以强制每个用户安装。所以我取出你的显式ALLUSERS = 0,看看你是否得到了每用户安装。如果安装尝试访问受限制的项目,您仍会收到安全错误,但这是一个单独的问题。