Windows 8.1 和 Windows 10 之间的 UAC 提升行为差异

问题描述 投票:0回答:1

我们有一个 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>

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

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

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

highestAvailable

我们已使用

中的客户端文件对此进行了测试
  • C:\Program Files
    和在
  • C:\Users\Public

两个位置具有相同的行为。

为什么 Windows 10 上的 UAC 提升行为有所不同?早期版本的行为是否是 UAC 中的错误?是否应该一直提示提升?

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

另请注意,我已测试将清单更改为

requestedExecutionLevel
asInvoker
。这不会提示在 Windows 10 上进行提升。

更新

我们跟踪了本地用户和域用户之间的差异提示的提升。 这篇 MSDN 文章 说:

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

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

manifest windows-10 uac elevation
1个回答
0
投票

你想念理解

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

如果您的程序需要管理员权限才能运行,那么您需要在清单中使用

requireAdministrator
。当标准用户启动此类进程时,会显示
over-the-shoulder
UAC 对话框,用户可以在其中输入管理员帐户的凭据。

© www.soinside.com 2019 - 2024. All rights reserved.