【问题标题】:UAC Elevation Behavior Differences Between Windows 8.1 and Windows 10Windows 8.1 和 Windows 10 之间的 UAC 提升行为差异
【发布时间】:2016-01-23 13:41:00
【问题描述】:

我们有一个 C# Windows 窗体客户端应用程序。此应用程序有时需要从受信任的内部网站检查自身的更新、下载、安装并重新启动自身。

为了使应用程序与用户帐户控制 (UAC) 兼容,我们在 .exe 中嵌入了一个清单,用于请求最高可用权限:

<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
  <security>
    <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
      <requestedExecutionLevel level="highestAvailable" uiAccess="false" />
    </requestedPrivileges>
  </security>
</trustInfo>

我们希望标准(非管理员)用户能够运行应用程序而不会被提示提升为管理员。我们授予标准用户对整个应用程序文件夹的完全权限。这意味着用户有权修改软件文件,但这是可以接受的。

在完全启用 UAC 的情况下,用户在 Windows 7、Windows 8 和 Windows 8.1 上使用此应用程序已有一段时间了。在这些操作系统上,当我们的应用程序启动时,Windows 不会提示用户提升到管理员权限。

我们现在正在测试 Windows 10 上的行为。在启用了完整 UAC 的 Windows 10 系统上,Windows 会提示标准用户提升为管理员。其他一切都没有改变。 .EXE 是一样的,嵌入的清单是相同的请求执行级别highestAvailable

我们已经使用 C:\Program Files 和 C:\Users\Public 中的客户端文件对此进行了测试。两个位置的行为相同。

为什么 UAC 提升行为在 Windows 10 上有所不同?以前版本的行为是 UAC 中的错误吗?应该一直在提示提升吗?

请注意,我们必须保持 UAC 处于启用状态。我知道如何禁用它。

另外请注意,我已测试将清单更改为 requestedExecutionLevelasInvoker。这不会在 Windows 10 上提示提升。

-- 更新--

我们已跟踪提升提示,以区分本地用户和域用户。 This MSDN article 说:

具有附加权限的标准用户(例如备份操作员)的应用程序启动行为...[将]在运行应用程序之前提示输入凭据

我们看到本地标准用户没有被提示提升,但本地域用户被提示提升。域用户对受限用户的唯一权限是成为域用户角色的成员。

【问题讨论】:

    标签: manifest windows-10 uac elevation


    【解决方案1】:

    你错过了解highestAvailable。这意味着如果您的帐户是管理员组的一部分,则请求完整的管理员令牌,但对于普通标准用户,不会显示 UAC 对话框,并且该过程使用标准令牌运行。

    如果您的程序需要管理员权限才能运行,那么您需要在清单中使用 requireAdministrator。当标准用户启动此类进程时,将显示over-the-shoulder UAC 对话框,用户可以在其中输入管理员帐户的凭据。

    【讨论】:

    • 我明白highestAvailable 的意思。我不明白为什么highestAvailable 会在 Windows 10 上提示提升,但在 Windows 7 上却不提示提升。这对我来说似乎是一种行为变化。用户的帐户没有管理员权限。可能不需要管理员权限,因为标准用户应该拥有对软件文件的完全访问权限。
    • 如果您不需要管理员权限,请将highestAvailable 更改为asInvoker,因为它是新软件的默认设置。
    猜你喜欢
    • 2023-03-31
    • 2011-02-11
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 2010-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多