6

我发现 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"/>

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

怎么回事?我特别想为**只是这个*用户安装这个 - 不是机器上的所有用户!

查看 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 Installer 决定将ALLUSERS属性更改为1?!?!? 我从来没有告诉过它!嘘……

有任何想法吗?想法?指针?

4

2 回答 2

11

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

  • ALLUSERS 属性值 1 指定每台机器的安装上下文。
  • 空字符串 ("") 的 ALLUSERS 属性值指定每个用户的安装上下文。
  • 如果 ALLUSERS 属性的值设置为 2,Windows 安装程序总是将 ALLUSERS 属性的值重置为 1 并执行每台计算机的安装,或者将 ALLUSERS 属性的值重置为空字符串 ("") 和执行按用户安装。值 ALLUSERS=2 使系统能够根据用户的权限和 Windows 版本重置 ALLUSERS 的值和安装上下文。

值“0”是未定义的,因此您可以获得 Windows 安装程序选择的任何未定义行为(选择以下之一):周/月/年/操作系统/服务包。

有关此答案背后的更多“幕后故事”详细信息,请参阅此博客条目

于 2014-10-10T18:29:05.730 回答
1

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

于 2014-10-11T17:05:52.553 回答