我们有一个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和Windows8.1上使用此应用程序一段时间了。在这些操作系统上,当我们的应用程序启动时,Windows不会提示用户提升到管理员权限。
我们现在正在Windows 10上测试行为。在Windows 10系统上,在启用完全UAC的情况下,Windows正在提示标准用户提升为管理员。其他的一切都没有改变。.EXE是相同的,嵌入的清单是相同的请求执行级别的highestAvailable
。
我们已经用C:\Program和C:\Users\Public中的客户端文件对此进行了测试。这两个地点都有相同的行为。
为什么UAC在Windows 10上的提升行为是不同的?以前版本的行为在UAC中是一个bug吗?它应该一直在推动提升吗?
请注意,我们必须保持UAC启用。我知道如何禁用它。
还请注意,我已经测试过将清单更改为requestedExecutionLevel
of asInvoker
。这并不会提示在Windows 10上提升。
-更新--
我们跟踪了海拔,提示本地用户和域用户之间的差异。这篇MSDN文章说:
在运行应用程序之前,具有附加权限的标准用户(例如. Backup操作符)...will提示凭据的启动行为
我们看到本地标准用户没有被提示要提升,但是本地域用户被提示要提升。域用户对有限用户拥有的唯一权限是域用户角色的成员。
发布于 2015-10-24 05:33:35
你不明白highestAvailable
的意思。这意味着,如果您的帐户是管理组的一部分,则请求完整的管理令牌,但是对于正常的标准用户,不显示UAC对话框,进程与标准令牌一起运行。
如果您的程序需要管理员权限才能工作,那么您需要在清单中使用requireAdministrator
。当标准用户启动这样的进程时,将显示over-the-shoulder
UAC对话框,其中用户可以输入管理帐户的凭据。
https://stackoverflow.com/questions/33312167
复制相似问题