2011-04-13 114 views
1

对于管理员和普通用户(不同的安装目录等),我的安装应该有不同的行为。同时也应该适用于XP,Vista和Windows 7WIX:如何区分管理员组和内置管理员的成员

的安装工程,我会期望XP和Vista,但它不能在Windows 7检测admin用户

我设置MSIUSEREALADMINDETECTION为1以确保只有管理员用户才能设置“特权”。

<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创建的管理员(在管理员组的成员),我认为这些帐户是相同的,但事实并非如此。

内置管理员将其特性设置为1,而Adminstrators组的成员则没有。

似乎没有办法检测Adminstrators组的成员?任何人?

+1

”在Vista上不会失败,但它在Vista上失败“ - 呵呵? – saschabeaumont 2011-04-14 06:08:06

回答

3

正如您链接到的线程中所述,这是启用UAC时的标准行为。通过UAC同意提示,管理员组的成员只需按需提升权限;在其他时候,他们几乎是标准用户(或多或少)。

+0

这是真的。在Vista和Windows 7上,任何人都可以通过海拔获得管理员权限。解决方案是使用Windows API来确定用户帐户类型的自定义操作。 – 2011-04-14 08:59:41

+0

@Cosmin你可能知道哪个API? – hammurabi 2011-04-18 18:45:45

+0

您可以尝试使用此方法:http://support.microsoft.com/kb/q118626/或NetUserGetInfo()函数:http://msdn.microsoft.com/en-us/library/aa370654%28VS.85%带有USER_INFO_1结构的29.aspx。 – 2011-04-18 19:29:18

2

不要担心设置MSIUSEREALADMINDETECTION,这是AdminUser属性。

我使用下面的代码:

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

然而,随着Vista和Windows 7的功能“过肩”认证(参考Using Windows Installer with UAC MSDN文档)的InstallUISequence在用户没有提升的权限,你将会遇到问题。

例如,标准用户运行安装程序,并只有一次,他们打出了“安装”按钮(与UAC盾)是他们提示输入管理凭据,所以你不知道如果管理员会提供他们或不在安装过程中。 “

相关问题