我们有一个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>
我们希望标准(非管理员)用户能够运行该应用程序,而不会被提示升为管理员。我们授予标准用户对整个应用程序文件夹的完全权限。这意味着用户可以处理软件文件,但这是可以接受的。
在完全启用UAC的情况下,用户一直在Windows 7,Windows 8和Windows 8.1上使用此应用程序。在这些操作系统上,启动我们的应用程序时,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文章说:
具有附加特权的标准用户(EG备份操作员)的应用程序启动行为... [将]在运行应用程序之前提示输入凭据
我们看到没有提示本地标准用户提升权限,但是提示本地域用户提升权限。域用户对受限用户的唯一特权是域用户角色的成员。
你想念的明白highestAvailable
。这意味着如果您的帐户是admin组的一部分,则请求完整的admin令牌,但是对于普通的标准用户,不会显示UAC对话框,并且该过程将使用标准令牌运行。
如果您的程序需要管理员权限才能运行,则需要requireAdministrator
在清单中使用。当标准用户启动该过程时,将显示over-the-shoulder
UAC对话框,用户可以在其中输入管理员帐户的凭据。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句