WIX:如何区分Administrators组和内置管理员的成员

时间:2011-04-13 19:35:16

标签: windows-7 windows-vista wix windows-installer

对于管理员和普通用户(不同的安装目录等),我的安装应该有不同的行为。同时它适用于XP,Vista和Windows 7.

安装程序正如我对XP和Vista所期望的那样工作,但它无法在Windows 7上检测到管理员用户。

我将MSIUSEREALADMINDETECTION设置为1以确保仅为管理员用户设置了Privileged。

<Property Id="MSIUSEREALADMINDETECTION" Value="1" />

作为管理员用户,以下条件在Vista上不会失败,但在Vista上失败

<Condition Message="Not Privileged">Privileged</Condition>

这是测试项目(我知道它不完整:)

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
  <Product Id="0b241708-eb30-4bd9-9906-983f228ee2a6" Name="wixTest01" Language="1033" Version="1.0.0.0" Manufacturer="wixTest01" UpgradeCode="1093efb2-75d0-499a-8050-99adfc8ae7c2">
    <Package InstallerVersion="200" Compressed="yes" />

    <UI>
      <UIRef Id="WixUI_InstallDir" />
    </UI>

    <Property Id="MSIUSEREALADMINDETECTION" Value="1" />
    <Condition Message="Privileged">Privileged</Condition>

  </Product>
</Wix>

更新:

我刚刚发现了这个:

http://windows-installer-xml-wix-toolset.687559.n2.nabble.com/Admin-check-in-Win-2008-td4557002.html

我在Vista上使用了内置管理员帐户,在Windows 7上使用了创建的管理员(管理员组成员)。我认为这些帐户是相同的,但它们不是。

内置管理员将其属性Privileged设置为1,而Administrators组的成员则不会。

似乎无法检测管理员组的成员?

2 个答案:

答案 0 :(得分:3)

如您链接到的主题中所述,这是启用UAC时的标准行为。在UAC同意提示下,Administrators组的成员仅按需获得提升的权限;在其他时候,他们几乎是标准用户(或多或少)。

答案 1 :(得分:2)

不要担心设置MSIUSEREALADMINDETECTION属于AdminUser属性。

我使用以下代码:

<Condition Message="Privileged">
    <![CDATA[Installed OR Privileged]]>
</Condition>

但是,由于Vista和Windows 7具有“肩负”身份验证(请参阅Using Windows Installer with UAC MSDN文档),因此用户在InstallUISequence期间没有提升权限,您将遇到问题。

例如,标准用户运行安装程序,只有当他们点击“安装”按钮(带有UAC防护罩)时,系统会提示他们输入管理凭据,因此如果管理员没有知道将在安装过程中提供或不提供它们。