Windows 8.1 和 Windows 10 之间的 UAC 提升行为差异
UAC Elevation Behavior Differences Between Windows 8.1 and Windows 10
我们有一个 C# Windows Forms 客户端应用程序。此应用程序有时需要从受信任的内部网站检查对自身的更新、下载更新、安装更新并自行重启。
为了使应用程序与用户帐户控制 (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>
我们希望标准(非管理员)用户能够 运行 应用程序而不会被提示提升为管理员。我们授予标准用户对整个应用程序文件夹的完全权限。这意味着用户有权随意修改软件文件,但这是可以接受的。
用户在 Windows 7、Windows 8 和 Windows 8.1 上使用此应用程序已经有一段时间了,并且完全启用了 UAC。在这些操作系统上,当我们的应用程序启动时,Windows 不会提示用户提升到管理员权限。
我们现在正在 Windows 10 上测试行为。在 Windows 10 系统上,启用完整的 UAC,Windows 会提示标准用户提升为管理员。其他一切都没有改变。 .EXE 是相同的,嵌入式清单是相同的请求执行级别 highestAvailable
。
我们已经使用 C:\Program Files 和 C:\Users\Public 中的客户端文件对此进行了测试。这两个位置具有相同的行为。
为什么 Windows 10 上的 UAC 提升行为不同?以前版本的行为是 UAC 中的错误吗?是不是应该一直提示提升?
请注意,我们必须启用 UAC。我知道如何禁用它。
另请注意,我已测试将清单更改为 asInvoker
的 requestedExecutionLevel
。这不是在 Windows 10.
上提示提升
-- 更新--
我们已经跟踪到本地用户和域用户之间差异的提升提示。 This MSDN article 说:
Application launch behavior for a standard user with additional privileges (E.G. Backup Operator)...[will] prompt for credentials before running the application
我们看到本地标准用户未提示提升,但提示本地域用户提升。域用户对受限用户的唯一特权是成为域用户角色的成员。
你想不明白highestAvailable
。这意味着如果您的帐户是管理员组的一部分,则请求完整的管理员令牌,但对于普通标准用户,不会显示 UAC 对话框,并且该过程使用标准令牌运行。
如果您的程序需要管理员权限才能运行,那么您需要在清单中使用 requireAdministrator
。当标准用户启动此类过程时,会显示 over-the-shoulder
UAC 对话框,用户可以在其中输入管理员帐户的凭据。
我们有一个 C# Windows Forms 客户端应用程序。此应用程序有时需要从受信任的内部网站检查对自身的更新、下载更新、安装更新并自行重启。
为了使应用程序与用户帐户控制 (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>
我们希望标准(非管理员)用户能够 运行 应用程序而不会被提示提升为管理员。我们授予标准用户对整个应用程序文件夹的完全权限。这意味着用户有权随意修改软件文件,但这是可以接受的。
用户在 Windows 7、Windows 8 和 Windows 8.1 上使用此应用程序已经有一段时间了,并且完全启用了 UAC。在这些操作系统上,当我们的应用程序启动时,Windows 不会提示用户提升到管理员权限。
我们现在正在 Windows 10 上测试行为。在 Windows 10 系统上,启用完整的 UAC,Windows 会提示标准用户提升为管理员。其他一切都没有改变。 .EXE 是相同的,嵌入式清单是相同的请求执行级别 highestAvailable
。
我们已经使用 C:\Program Files 和 C:\Users\Public 中的客户端文件对此进行了测试。这两个位置具有相同的行为。
为什么 Windows 10 上的 UAC 提升行为不同?以前版本的行为是 UAC 中的错误吗?是不是应该一直提示提升?
请注意,我们必须启用 UAC。我知道如何禁用它。
另请注意,我已测试将清单更改为 asInvoker
的 requestedExecutionLevel
。这不是在 Windows 10.
-- 更新--
我们已经跟踪到本地用户和域用户之间差异的提升提示。 This MSDN article 说:
Application launch behavior for a standard user with additional privileges (E.G. Backup Operator)...[will] prompt for credentials before running the application
我们看到本地标准用户未提示提升,但提示本地域用户提升。域用户对受限用户的唯一特权是成为域用户角色的成员。
你想不明白highestAvailable
。这意味着如果您的帐户是管理员组的一部分,则请求完整的管理员令牌,但对于普通标准用户,不会显示 UAC 对话框,并且该过程使用标准令牌运行。
如果您的程序需要管理员权限才能运行,那么您需要在清单中使用 requireAdministrator
。当标准用户启动此类过程时,会显示 over-the-shoulder
UAC 对话框,用户可以在其中输入管理员帐户的凭据。