避免使用管理员密码 UAC

Posted

技术标签:

【中文标题】避免使用管理员密码 UAC【英文标题】:Avoid Admin Password UAC 【发布时间】:2015-02-12 10:13:57 【问题描述】:

我们有一个 win 表单应用程序(基于 4.0 框架客户端配置文件构建),它是在自定义协议的帮助下从 Web 应用程序启动的。

对于非管理员用户(例如:超级用户、标准用户),当应用程序启动时,系统会弹出一个 UAC(在系统中,UAC 控制设置设置为“始终通知”,它必须是同样)询问管理员密码。

请注意,我们正在使用清单来运行应用程序,并提升了管理员权限

在这方面的任何帮助以避免同样的情况将是可观的。提前致谢

问候,

卡提克

【问题讨论】:

好吧,如果应用程序需要管理员权限,那么 UAC 的全部意义就是请求权限...? 那么,您正在运行一个需要管理员权限的应用程序,但您不希望它询问管理员密码?如果可能的话,那就太糟糕了:)但是您可以安装一个主机 Windows 服务来执行您需要做的任何事情,默认情况下以系统/管理员权限运行它,并让客户端应用程序调用它并告诉它该做什么:) 感谢您的快速回复。但是根据工作流程,它必须从网页启动 【参考方案1】:

简单的答案:你不能。 UAC 的目标是阻止应用程序在未经用户批准的情况下执行需要管理权限的操作。这是操作系统内置的一项安全功能,因此任何恶意软件都不会在未经用户批准的情况下将计算机置于危险之中。

因此,由于它是一项安全功能,如果用户没有专门关闭系统上的 UAC,您就无法绕过它。

【讨论】:

【参考方案2】:

显然,您无法解决 Windows 中限制标准用户和高级用户可以执行的操作的安全性。您的问题并不完全清楚,但如果您的目标是在以非管理员身份运行时不需要提升,那么您可以通过遵循以下高级程序来实现它:

从您的可执行文件中删除清单。在执行应用程序之前,Windows 将不再需要提升。

在您的应用程序初始化时(最好在它变得可见之前)检测执行该应用程序的用户是否是管理员。

如果用户是本地管理员,则让正在运行的应用程序实例启动一个新的应用程序实例,这一次需要提升。然后,当提升的实例启动时,应用程序的第一个实例将终止。

如果用户不是本地管理员,则继续运行应用程序,但意识到应用程序在没有管理权限的情况下执行。

如果您这样做,管理员将收到 UAC 提示以提升应用程序,而非管理员将不会收到任何提示(也没有管理权限)。

您可以在an answer to a question on Stack Overflow about elevating process privilege programmatically 中获取有关如何执行其中一些任务的详细信息

【讨论】:

以上是关于避免使用管理员密码 UAC的主要内容,如果未能解决你的问题,请参考以下文章

UAC是啥?如何关闭UAC

[技术分享]借用UAC完成的提权思路分享

查看电脑保存的WIFI密码

Vista UAC下应用程序标注为“需要管理员权限”的四种方法

在 vista 中避免 UAC

如何在 C# 中创建一个没有密码的另一个用户的进程?