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

mar*_*c_s 6 windows-installer wix windows-7 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"/>
Run Code Online (Sandbox Code Playgroud)

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

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

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

Rob*_*ing 11

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

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

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

有关此问题背后的详细信息,请参阅此博客文章.

  • 正确.您无法定义没有值的非隐藏/安全属性.在我的博客文章末尾调出来:http://robmensching.com/blog/posts/2014/10/10/stackoverflow-what-does-allusers0-mean/ (2认同)

Phi*_*lDW 1

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