用户帐户控制
注意
此设计指南是为 Windows 7 创建的,尚未针对较新版本的 Windows 进行更新。 大部分指导原则上仍然适用,但演示和示例并不反映我们 当前设计指南。
设计良好的用户帐户控制体验有助于防止不需要的系统范围的更改,其可预测性且需要最少的努力。
完全启用用户帐户控制(UAC)后,交互式管理员通常以最少的用户权限运行,但他们可以通过授予同意 UI 的明确同意来自行提升来执行管理任务。 此类管理任务包括安装软件和驱动程序、更改系统范围的设置、查看或更改其他用户帐户,以及运行管理工具。
在最低特权状态下,管理员称为“受保护的管理员”。 在提升状态中,它们称为提升的管理员。 相比之下,标准用户无法自行提升,但可以要求管理员使用凭据 UI 提升他们。 内置管理员帐户不需要提升。
许可 UI,用于提升受保护的管理员具有管理权限。
请求密码屏幕截图
用于提升标准用户的凭据 UI。
UAC 具有以下优势:
- 它减少了使用提升的权限运行的程序数,因此有助于防止用户意外更改其系统设置,并帮助防止“恶意软件”获得系统范围的访问。 拒绝提升后,恶意软件只能影响当前用户的数据。 如果没有提升,恶意软件将无法进行系统范围的更改或影响其他用户。
- 对于 托管环境,设计良好的 UAC 体验可让用户在以标准用户身份运行时更高效地运行,从而消除不必要的限制。
- 它使标准用户能够要求管理员授予他们在当前会话中执行管理任务的权限。
- 对于家庭环境,它可以更好地控制系统范围的更改,包括安装的软件。
开发人员: 有关实现信息,请参阅 重新设计 UI for UAC 兼容性。
在 Windows Vista 中,受保护的管理员可以选择收到所有系统更改或无通知。 UAC 默认设置是通知所有更改,无论其来源是什么。 收到通知后,桌面将灰显,并且必须在 UAC 对话框中批准或拒绝请求,然后才能在计算机上执行任何其他作。 桌面的变暗称为 安全桌面,因为其他程序在变暗时无法运行。
Windows 7 为受保护的管理员引入了两个中间 UAC 设置,以及 Windows Vista 中的两个设置。 第一种是仅在程序进行更改时通知用户,因此管理员在自行进行更改时会自动提升。 这是 Windows 7 中的 UAC 默认设置,它还使用安全桌面。
Windows 7 中的第二个中间设置与第一个设置相同,只不过它不使用安全桌面。
windows 7屏幕截图
Windows 7 引入了两个中间 UAC 设置。
注意: 有关编写支持用户帐户控制 代码的指南,将单独发表文章。
设计概念
目标
设计良好的用户帐户控制体验具有以下目标:
- 消除不必要的提升。 用户必须仅提升权限才能执行需要管理权限的任务。 所有其他任务都应设计为消除提升需求。 通常,旧软件需要管理员权限,只需写入 HKLM 或 HKCR 注册表部分,或程序文件或 Windows 系统文件夹。
- 可预测。 标准用户需要知道哪些任务需要管理员执行,或者无法在托管环境中执行。 管理员需要知道哪些任务需要提升。 如果他们无法准确预测提升的需求,则他们更有可能在不应同意管理任务时获得许可。
- 需要最少的努力。 需要管理权限的任务应设计为需要单个提升。 需要多个提升的任务会很快变得繁琐。
- 还原为最小特权。 完成需要管理权限的任务后,程序应还原为最低特权状态。
提升任务流
当任务需要提升时,它具有以下步骤:
入口点。 完全启用 UAC 时需要立即提升的任务具有使用 UAC 防护标记的入口点。 在这种情况下,用户应在单击此类命令后立即看到提升 UI,当他们看到来自没有盾牌的任务中的提升 UI 时,他们应格外谨慎。
uac 盾牌图标及其标签屏幕截图
在此示例中,家长控制和用户帐户控制面板项目需要提升。
当 UAC 部分启用或完全关闭时,仍会显示 UAC 防护,以指示任务涉及系统级更改,因此需要提升,即使用户可能看不到提升 UI。 对于需要提升的任务,始终显示 UAC 防护,使 UI 保持简单且可预测的状态。
海拔。 对于受保护的管理员,任务使用许可 UI 请求同意。 对于标准用户,任务使用凭据 UI 请求管理员凭据。
两种类型的提升屏幕截图
这些示例显示了凭据 UI 和许可 UI。
单独提升的进程。 在内部,会创建一个新的提升的进程来执行任务。
还原为最低特权。 如有必要,请还原为最低特权,以完成不需要提升的任何步骤。
请注意,任务不会“记住”提升的状态。 例如,如果用户在向导中的提升入口点上来回导航,则用户每次都必须提升。
使用模式
用户帐户控制有多个使用模式(按首选项顺序):
适用于标准用户。 通过将功能的范围限制为当前用户来设计所有用户的功能。 通过将设置限制为当前用户(而不是系统范围),可以完全不需要提升 UI,并使用户能够完成任务。
不正确:
在此示例中,Windows XP 用户必须具有管理权限才能查看或更改当前时区。
正确:
在此示例中,时区功能在 Windows 7 和 Windows Vista 中重新设计,供所有用户使用。
为标准用户和管理员提供单独的 UI 元素。 清楚地将标准用户任务与管理任务分开。 向所有用户授予对有用只读信息的访问权限。 使用 UAC 防护明确标识管理任务。
uac 盾牌的
在此示例中,系统控制面板项向所有用户显示其状态,但更改系统范围的设置需要提升。
允许标准用户尝试任务,并在失败时提升。 如果标准用户可以查看信息,并且能够在不提升的情况下进行一些更改,则允许他们访问 UI,并且仅在任务失败时提升它们。 当标准用户具有有限的访问权限(例如,在 Windows 资源管理器中具有自己的文件的属性)时,此方法适用。 它还适用于控制面板混合中心页上的设置。
拒绝访问
在此示例中,用户尝试更改程序文件属性,但没有足够的权限。 用户可以提升并重试。
仅适用于管理员。 仅对管理员功能和程序使用此方法! 如果某个功能仅适用于管理员(并且没有适用于标准用户的导航路径或有用的只读信息),则可以在入口点提示管理员凭据,然后再显示任何 UI。 当所有路径都需要管理权限时,将此方法用于冗长的向导和 页流。
如果整个程序仅适用于管理员,请将其标记为提示输入管理员凭据以启动。 Windows 使用 UAC 防护覆盖显示此类程序图标。
windows 徽标和 uac 防护覆盖屏幕截图
在此示例中,程序需要管理权限才能启动。
指引
UAC 防护图标
显示带有 UAC 防护的控件,以指示任务在完全启用 UAC 时需要立即提升, 即使 UAC 当前未完全启用也是如此。 如果向导和 页面流的所有路径 需要提升,请在任务的入口点显示 UAC 防护。 正确使用 UAC 防护可帮助用户预测何时需要提升。
如果你的程序支持多个版本的 Windows,如果至少一个版本需要提升,则显示 UAC 防护。 由于 Windows XP 从不需要提升,因此,如果可以一致且不会损害性能,请考虑删除适用于 Windows XP 的 UAC 防护。
对于大多数上下文中不需要提升的任务,请不要显示 UAC 防护。 由于此方法有时具有误导性,因此首选方法是改用受适当防护的上下文命令。
windows 资源管理器中照片文件的
由于“新建文件夹”命令仅在系统文件夹中使用时才需要提升,因此它不会显示 UAC 防护。
UAC 防护可以显示在以下控件上:
命令按钮:
带有 uac 盾牌图标的命令按钮的
需要立即提升的命令按钮。
命令链接:
命令链接的屏幕截图
需要立即提升的命令链接。
链接:
更改帐户链接的屏幕截图
需要即时提升的链接。
菜单:
带有 uac shield屏幕截图
需要立即提升的下拉菜单。
由于任务不记得提升的状态,因此 不会更改 UAC 防护以反映状态。
显示 UAC 防护,即使用户帐户控制已关闭,或者用户正在使用内置管理员帐户。 一致地显示 UAC 盾牌更易于编程,为用户提供有关任务性质的信息。
海拔
尽可能设计标准用户执行的任务,而无需提升。 向所有用户授予对有用只读信息的访问权限。
根据每个任务提升,而不是基于每个设置提升。 不要将标准用户设置与单页或对话框中的管理设置混合使用。 例如,如果标准用户可以更改部分但并非所有设置,请将这些设置拆分为单独的 UI 图面。
不正确:
在此示例中,标准用户设置错误地与管理设置混合。
正确:
不带 uac 防护屏幕截图
在此示例中,更改日期和时间的设置位于单独的对话框中,仅供管理员使用。 时区设置对标准用户可用,不与管理设置混合。
在确定是否应显示或禁用控件时,不要考虑需要提升。 这是因为:
- 在非托管环境中,假设标准用户可以通过请求管理员提升。 禁用需要提升权限的控件将阻止用户提升管理员。
- 在托管环境中,假设标准用户根本无法提升。 删除需要提升的控件会阻止用户知道何时停止查找。
消除不必要的提升:
- 如果任务可能需要提升,请尽可能晚提升。 如果任务需要 确认,则仅在用户确认后显示提升 UI。 如果任务始终需要提升,请在其入口点提升。
- 提升后,请保持提升状态,直到不再需要提升的权限。 用户不必多次提升才能执行单个任务。
- 如果用户必须提升权限才能进行更改,但选择不进行任何更改,请保留启用正提交按钮,但将提交作为取消进行处理。 这样做可消除用户只需关闭窗口即可提升权限。
- 不正确:
-
- 在此示例中,禁用“保存更改”按钮以避免不必要的提升,但在用户更改选择时会启用。 但是,禁用的提交按钮使用户看起来确实没有选择。
任务失败时,不要显示错误消息,因为用户选择不提升。 假设用户有意选择不继续,因此不会将这种情况视为错误。
不正确:
消息
在此示例中,当用户决定不提升时,Fabrikam Restore 错误地给出错误消息。
不要显示警告来解释用户可能需要提升其执行任务的权限。 让用户自行发现这一事实。
基于下表显示 UAC 防护和提升 UI:
对象 情况 放置 UAC 防护的位置 何时提升 程序 整个程序仅适用于管理员。 windows 徽标和 uac 防护覆盖屏幕截图
程序图标上的 UAC 防护覆盖。在启动时显示提升 UI。 命令 整个命令仅适用于管理员。 更改帐户链接和 uac shield屏幕截图
命令按钮或链接上的 UAC 防护。单击命令按钮或链接时显示提升 UI,但在进行任何确认后显示。 命令 命令显示适用于所有用户的有用只读信息,但更改需要管理权限。 更改设置链接和 uac shield屏幕截图
命令按钮上的 UAC 防护或链接进行更改。单击命令按钮时显示提升 UI,但在进行任何确认后显示。 命令 标准用户可以查看信息,并且可以在不提升的情况下进行一些更改。 允许标准用户尝试并在失败时提升。 重试按钮上的 uac 图标
不要显示命令的 UAC 防护,但如果命令失败,则为提升入口点显示它。当用户重试命令时显示提升 UI。 任务步骤 所有后续步骤都需要提升。 的下一个命令按钮的屏幕截图
“下一步”按钮上的 UAC 防护(或等效)。单击“下一步”或其他提交按钮时显示提升 UI。 任务步骤 某些分支需要提升。 命令链接的屏幕截图
需要提升的命令链接上的 UAC 防护。单击 UAC 防护的命令链接时显示提升 UI。
提升 UI
- 如果用户提供的帐户无效(名称或密码)或没有管理员权限,只需重新显示凭据 UI。 不显示错误消息。
- 如果用户取消凭据 UI,则返回用户回到原始 UI。 不显示错误消息。
- 如果用户帐户控制已关闭,标准用户尝试执行需要提升的任务,请提供一条错误消息,指出“此任务需要管理员权限。 若要执行此任务,必须使用管理员帐户登录。
任务
在此示例中,用户帐户控制已关闭,因此错误消息说明用户必须使用管理员帐户。
向导
- 不要多次提升。 提升向导后,它应保持提升状态。
- 如果在向导中执行任务,请将 UAC 防护放在“提交”页面的“下一步”按钮上(该按钮应提供更 特定标签)。 用户提交时:
- 如果下一页是“进度”页,请转到该页并模式显示提升 UI。 成功提升后,执行任务。
- 如果下一页是“完成”页,请转到该页(但暂时将其内容替换为“正在等待权限...”),并模式显示提升 UI。 成功提升后,执行任务,然后显示“完成”页内容。
- 如果用户取消提升 UI,则返回到“提交”页。 这样,用户就可以重试。
- 如果在向导完成后执行任务,请在提交页面的“完成”按钮上放置 UAC 防护(应为该按钮提供更 特定标签)。 用户提交时:
- 保留在“提交”页上,以模式方式显示提升 UI。 成功提升后,关闭向导。
- 如果用户取消提升 UI,则返回到“提交”页。 这样,用户就可以重试。
- 对于仅适用于管理员的冗长向导,可以在显示任何 UI 之前在入口点提示管理员凭据。
发短信
- 不要只因为命令需要提升而使用省略号。 需要使用 UAC 防护来指示提升。
文档
引用用户帐户控制时:
- 将此功能称为用户帐户控制(首次提及)或 UAC(后续提及),而不是最低特权用户帐户或 LUA。
- 将非管理员称为标准用户。
- 以内置管理员身份引用内置计算机管理员。
在用户文档中:
- 请参阅授予权限时同意执行管理任务的行为。
在编程和其他技术文档中:
- 请参阅同意以提升身份执行管理任务的行为。
- 在 UAC 的上下文中,在提升后将管理员称为“受保护的管理员”,并在提升后将管理员称为“提升管理员”。
- 请参阅用于输入密码作为凭据 UI 的对话框。 请参阅用于授予同意作为同意 UI 的对话框。 通常将这两者称为提升 UI。