【发布时间】: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 处于启用状态。我知道如何禁用它。
另外请注意,我已测试将清单更改为 requestedExecutionLevel 或 asInvoker。这不会在 Windows 10 上提示提升。
-- 更新--
我们已跟踪提升提示,以区分本地用户和域用户。 This MSDN article 说:
具有附加权限的标准用户(例如备份操作员)的应用程序启动行为...[将]在运行应用程序之前提示输入凭据
我们看到本地标准用户没有被提示提升,但本地域用户被提示提升。域用户对受限用户的唯一权限是成为域用户角色的成员。
【问题讨论】:
标签: manifest windows-10 uac elevation