尽管接受了UAC提示(自定义操作)但未升级

时间:2010-12-03 11:30:02

标签: authentication wix windows-installer uac custom-action

我使用wix构建了一个安装程序,其中包括需要管理权限的自定义操作。

目前此安装程序仅在buildin管理员帐户执行时才有效。在这种情况下,不会显示UAC提示 如果安装程序由本地管理员组的任何其他成员执行,则会显示UAC提示。虽然我允许对我的计算机进行更改,但我的自定义操作中的windows api函数会返回“缺少权限”等错误,...

我试图让自定义操作执行延迟,但这没有帮助。

我的想法已经不多了,所以非常欢迎你的帮助。

此致 拉尔夫

3 个答案:

答案 0 :(得分:1)

尝试使用 msidbCustomActionTypeNoImpersonate 标志运行自定义操作(将Impersonate设置为“no”): http://msdn.microsoft.com/en-us/library/aa368069(VS.85).aspx

这样它将在具有完全权限的本地系统帐户下运行。请注意,为了使用此标志,您的行为应该延期。

答案 1 :(得分:1)

据我所知,安装脚本由LocalSystem帐户执行。看起来似乎(看http://msdn.microsoft.com/en-us/library/ms684190)在此帐户中禁用了多项权限。例如,SE_BACKUP_NAME已禁用,调用LoadUserProfile需要此项。

我已经尝试过AdjustTokenPrivileges API函数,但没有成功。 LocalSystem帐户是否具有TOKEN_ADJUST_PRIVILEGES?我不知道相关的SE_XXXXXX_NAME权限。

此致 拉尔夫

答案 2 :(得分:1)

我发现的解决方案是我将我的安装程序与引导程序合并,如果用户没有适当的权限,它将提示UAC。

如果您不想使用此方法,此代码可能会对您有所帮助。

  

public static ActionResult CheckPrivileges(Session session)           {

        bool isadmin = false;

        System.Security.Principal.WindowsIdentity wi = System.Security.Principal.WindowsIdentity.GetCurrent();
        System.Security.Principal.WindowsPrincipal wp = new System.Security.Principal.WindowsPrincipal(wi);

        if (wp.IsInRole("Administrators"))
            isadmin = true;
        else
            isadmin = false;

        if (isadmin)
        {
            return ActionResult.Success;
        }
        else
        {
            if (System.Environment.OSVersion.Version.Major >= 6) // Windows Vista or higher
                MessageBox.Show("Administrator priveleges are required to install the application. Please right click the setup file and select 'Run as administrator'.", "Mesaage", MessageBoxButtons.OK, MessageBoxIcon.Error);
            else
                MessageBox.Show("Administrator priveleges are required to install the application.", "Mesaage", MessageBoxButtons.OK, MessageBoxIcon.Error);

            return ActionResult.Failure;
        }
    }